域名监控列表
通过 DomScan API,监控域名的到期和可用性变化。已注册域名变为可注册状态时接收提醒。
域名监控列表
监控域名的到期和可用性变化。已注册域名变为可注册状态时接收提醒。
使用Google登录以访问您的个性化域名监控表,包括电子邮件警报、Webhook等。
通过电子邮件、Telegram、Slack、Discord 或 Webhook 接收通知。
Get 所有 domains 在...中 your watchlist.
支持分页:传入 limit(1 到 100),并将 next_cursor 作为 cursor 传回。响应包含 has_more 和 next_cursor。不传 limit 时返回完整列表。参见分页。
响应示例
{
"watchlist": [
{
"domain": "startup.com",
"added_at": "2024-01-15T10:30:00Z",
"status": "registered",
"expiry_date": "2025-01-15T00:00:00Z",
"days_until_expiry": 287,
"last_checked": "2024-03-01T12:00:00Z",
"notify_email": "[email protected]",
"check_count": 4
}
],
"total": 1,
"updated_at": "2024-03-01T12:00:00Z"
}
响应字段
| 字段 | 类型 |
|---|---|
has_more |
boolean |
next_cursor |
string | null |
watchlist[] |
object[] |
watchlist[] |
object |
watchlist[].domain |
string |
watchlist[].added_at |
string |
watchlist[].status |
string |
watchlist[].last_checked |
string |
watchlist[].expiry_date |
string |
watchlist[].days_until_expiry |
integer |
watchlist[].notify_email |
string |
watchlist[].check_count |
integer |
total |
integer |
updated_at |
string |
响应字段
| 字段 | 类型 |
|---|---|
success |
boolean |
message |
string |
watchlist[] |
object[] |
watchlist[] |
object |
watchlist[].domain |
string |
watchlist[].added_at |
string |
watchlist[].status |
string |
watchlist[].last_checked |
string |
watchlist[].expiry_date |
string |
watchlist[].days_until_expiry |
integer |
watchlist[].notify_email |
string |
watchlist[].check_count |
integer |
total |
integer |
响应示例
{
"success": true,
"message": "Added example.org to watchlist",
"watchlist": [
{
"domain": "example.com",
"added_at": "2026-06-02T09:12:00.000Z",
"last_checked": "2026-10-09T03:00:12.000Z",
"status": "expiring_soon",
"expiry_date": "2026-12-18T14:22:08Z",
"days_until_expiry": 70,
"notify_email": "[email protected]"
},
{
"domain": "example.org",
"added_at": "2026-10-09T10:15:30.000Z",
"status": "unknown",
"notify_email": "[email protected]"
}
],
"total": 2
}
从监控列表移除
curl -X DELETE -H "X-API-Key: your-api-key" "https://domscan.net/v1/watchlist?domain=mydomain.com"
响应字段
| 字段 | 类型 |
|---|---|
success |
boolean |
message |
string |
domain |
string |
watchlist[] |
object[] |
watchlist[] |
object |
watchlist[].domain |
string |
watchlist[].added_at |
string |
watchlist[].status |
string |
watchlist[].last_checked |
string |
watchlist[].expiry_date |
string |
watchlist[].days_until_expiry |
integer |
watchlist[].notify_email |
string |
watchlist[].check_count |
integer |
total |
integer |
响应示例
{
"success": true,
"message": "Request completed",
"domain": "example.com",
"watchlist": [
{
"domain": "example.com",
"added_at": "2026-08-27T12:00:00Z",
"status": "registered",
"last_checked": "2026-08-27T12:00:00Z",
"expiry_date": "2026-08-27T12:00:00Z",
"days_until_expiry": 1,
"notify_email": "[email protected]",
"check_count": 1
}
],
"total": 1
}
即将过期
支持分页:传入 limit(1 到 100),并将 next_cursor 作为 cursor 传回。响应包含 has_more 和 next_cursor。不传 limit 时返回完整列表。参见分页。
响应示例
{
"expiring_domains": [
{
"domain": "renewal-window.com",
"status": "expiring_soon",
"expiry_date": "2026-05-12T00:00:00Z",
"days_until_expiry": 28,
"check_count": 11
}
],
"total": 1,
"threshold_days": 30
}
响应字段
| 字段 | 类型 |
|---|---|
has_more |
boolean |
next_cursor |
string | null |
expiring_domains[] |
object[] |
expiring_domains[] |
object |
expiring_domains[].domain |
string |
expiring_domains[].added_at |
string |
expiring_domains[].status |
string |
expiring_domains[].last_checked |
string |
expiring_domains[].expiry_date |
string |
expiring_domains[].days_until_expiry |
integer |
expiring_domains[].notify_email |
string |
expiring_domains[].check_count |
integer |
total |
integer |
threshold_days |
integer |
可用
支持分页:传入 limit(1 到 100),并将 next_cursor 作为 cursor 传回。响应包含 has_more 和 next_cursor。不传 limit 时返回完整列表。参见分页。
响应示例
{
"available_domains": [
{
"domain": "startupdrop.ai",
"status": "available",
"last_checked": "2026-04-14T08:30:00Z",
"check_count": 18
}
],
"total": 1,
"message": "您监控列表中的这些域名现在可以注册了!"
}
响应字段
| 字段 | 类型 |
|---|---|
has_more |
boolean |
next_cursor |
string | null |
available_domains[] |
object[] |
available_domains[] |
object |
available_domains[].domain |
string |
available_domains[].added_at |
string |
available_domains[].status |
string |
available_domains[].last_checked |
string |
available_domains[].expiry_date |
string |
available_domains[].days_until_expiry |
integer |
available_domains[].notify_email |
string |
available_domains[].check_count |
integer |
total |
integer |
message |
string |
提醒 Webhook
以带签名的 JSON POST 请求形式,在您自己的 HTTPS 端点接收监控提醒。可以使用 API 密钥管理端点,登录后也可以在监控设置中管理。
事件类型
| 监控 | 事件 |
|---|---|
| 监视列表中的可用性、到期和状态 | domain.available domain.expiring_30 domain.expiring_14 domain.expiring_7 domain.expiring_1 domain.status_change |
| 域名变更监控 | domain.dns_changed domain.certificate_changed domain.registration_changed domain.hosting_changed domain.technology_changed domain.email_security_changed |
| 品牌监控(新注册的相似域名) | brand.threat_detected |
| 关注列表提醒订阅(证书、价格、DNS 记录、仿冒域名) | ssl.expiring ssl.expired ssl.changed price.dropped dns.changed typosquat.detected |
| 异步任务(免费,仅适用于使用 notify_webhook 创建的任务) | job.completed job.failed job.cancelled |
| 测试事件(免费) | webhook.test |
定价
每条以 2xx 响应成功投递到端点的提醒消耗 2 积分。积分会在首次尝试前预留,如果投递失败、被取消或端点被删除,则会退还。测试事件免费。余额不足时,提醒会被跳过,且不会扣费。
注册一个 HTTPS 端点。URL 必须解析到公网地址。省略 events,或传入 ["*"],即可接收所有事件类型。签名密钥只会在本次响应中返回。
请求示例
curl -X POST "https://domscan.net/v1/webhooks" \
-H "X-API-Key: $DOMSCAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://hooks.example.com/domscan",
"events": ["domain.expiring_30", "domain.available", "domain.dns_changed"]
}'
响应示例
{
"endpoint": {
"id": "whe_3f1c0a9b8e7d6c5b4a39281706f5e4d3",
"url": "https://hooks.example.com/domscan",
"events": ["domain.available", "domain.expiring_30", "domain.dns_changed"],
"status": "active",
"secret_hint": "9c2e"
},
"secret": "whsec_..."
}
响应字段
| 字段 | 类型 |
|---|---|
endpoint |
object |
endpoint.id |
string |
endpoint.url |
string |
endpoint.description |
string | null |
endpoint.events[] |
string[] |
endpoint.status |
string |
endpoint.disabled_reason |
string | null |
endpoint.consecutive_failures |
integer |
endpoint.secret_hint |
string |
endpoint.previous_secret_expires_at |
string | null |
endpoint.secret_rotated_at |
string | null |
endpoint.last_success_at |
string | null |
endpoint.last_failure_at |
string | null |
endpoint.last_error |
string | null |
endpoint.created_at |
string |
endpoint.updated_at |
string |
endpoint.disabled_at |
string | null |
secret |
string |
列出您的端点及其状态、已订阅的事件、失败次数和密钥的末四位字符,同时返回可用的事件类型和投递策略。
响应字段
| 字段 | 类型 |
|---|---|
endpoints[] |
object[] |
endpoints[] |
object |
endpoints[].id |
string |
endpoints[].url |
string |
endpoints[].description |
string | null |
endpoints[].events[] |
string[] |
endpoints[].status |
string |
endpoints[].disabled_reason |
string | null |
endpoints[].consecutive_failures |
integer |
endpoints[].secret_hint |
string |
endpoints[].previous_secret_expires_at |
string | null |
endpoints[].secret_rotated_at |
string | null |
endpoints[].last_success_at |
string | null |
endpoints[].last_failure_at |
string | null |
endpoints[].last_error |
string | null |
endpoints[].created_at |
string |
endpoints[].updated_at |
string |
endpoints[].disabled_at |
string | null |
available_events[] |
string[] |
all_events |
string |
test_event |
string |
policy |
object |
policy.secret_rotation_grace_seconds |
integer |
policy.secret_rotation_credits |
integer |
policy.credits_per_delivered_alert |
integer |
policy.test_event_credits |
integer |
policy.job_event_credits |
integer |
policy.failed_deliveries_charged |
boolean |
policy.max_endpoints |
integer |
policy.max_attempts |
integer |
policy.disable_after_consecutive_failures |
integer |
policy.signature_tolerance_seconds |
integer |
响应示例
{
"endpoints": [
{
"id": "example-id",
"url": "https://example.com",
"events": [
"example"
],
"status": "active",
"secret_hint": "example",
"created_at": "2026-08-27T12:00:00Z",
"description": "example",
"disabled_reason": "customer",
"consecutive_failures": 1,
"previous_secret_expires_at": "2026-08-27T12:00:00Z",
"secret_rotated_at": "2026-08-27T12:00:00Z",
"last_success_at": "2026-08-27T12:00:00Z",
"last_failure_at": "2026-08-27T12:00:00Z",
"last_error": "example",
"updated_at": "2026-08-27T12:00:00Z",
"disabled_at": "2026-08-27T12:00:00Z"
}
],
"available_events": [
"domain.available"
],
"policy": {
"credits_per_delivered_alert": 2,
"test_event_credits": 0,
"failed_deliveries_charged": false,
"max_endpoints": 1,
"max_attempts": 1,
"disable_after_consecutive_failures": 1,
"signature_tolerance_seconds": 1,
"secret_rotation_grace_seconds": 86400,
"secret_rotation_credits": 0,
"job_event_credits": 0
},
"all_events": "*",
"test_event": "webhook.test"
}
暂停或启用端点、更改其事件,或编辑其说明。启用端点会重置其失败次数。
{ "enabled": true, "events": ["*"] }
响应字段
| 字段 | 类型 |
|---|---|
endpoint |
object |
endpoint.id |
string |
endpoint.url |
string |
endpoint.description |
string | null |
endpoint.events[] |
string[] |
endpoint.status |
string |
endpoint.disabled_reason |
string | null |
endpoint.consecutive_failures |
integer |
endpoint.secret_hint |
string |
endpoint.previous_secret_expires_at |
string | null |
endpoint.secret_rotated_at |
string | null |
endpoint.last_success_at |
string | null |
endpoint.last_failure_at |
string | null |
endpoint.last_error |
string | null |
endpoint.created_at |
string |
endpoint.updated_at |
string |
endpoint.disabled_at |
string | null |
响应示例
{
"endpoint": {
"id": "example-id",
"url": "https://example.com",
"events": [
"example"
],
"status": "active",
"secret_hint": "example",
"created_at": "2026-08-27T12:00:00Z",
"description": "example",
"disabled_reason": "customer",
"consecutive_failures": 1,
"previous_secret_expires_at": "2026-08-27T12:00:00Z",
"secret_rotated_at": "2026-08-27T12:00:00Z",
"last_success_at": "2026-08-27T12:00:00Z",
"last_failure_at": "2026-08-27T12:00:00Z",
"last_error": "example",
"updated_at": "2026-08-27T12:00:00Z",
"disabled_at": "2026-08-27T12:00:00Z"
}
}
删除端点。待投递的提醒将被取消,已预留的积分会退还。
响应字段
| 字段 | 类型 |
|---|---|
id |
string |
deleted |
boolean |
响应示例
{
"id": "example-id",
"deleted": true
}
发送一条免费的 webhook.test 事件并返回结果。测试事件不会重试,也不计入自动暂停的失败次数。
响应字段
| 字段 | 类型 |
|---|---|
delivery |
object |
delivery.id |
string |
delivery.endpoint_id |
string |
delivery.event_id |
string |
delivery.event_type |
string |
delivery.status |
string |
delivery.attempts |
integer |
delivery.next_attempt_at |
string | null |
delivery.last_attempt_at |
string | null |
delivery.response_status |
integer | null |
delivery.last_error |
string | null |
delivery.credits_charged |
integer |
delivery.refunded |
boolean |
delivery.created_at |
string |
delivery.delivered_at |
string | null |
delivered |
boolean |
响应示例
{
"delivery": {
"id": "example-id",
"endpoint_id": "example",
"event_id": "example",
"event_type": "domain",
"status": "pending",
"attempts": 1,
"next_attempt_at": "2026-08-27T12:00:00Z",
"last_attempt_at": "2026-08-27T12:00:00Z",
"response_status": 1,
"last_error": "example",
"credits_charged": 1,
"refunded": false,
"created_at": "2026-08-27T12:00:00Z",
"delivered_at": "2026-08-27T12:00:00Z"
},
"delivered": false
}
替换端点的签名密钥,已暂停的端点也可以。新密钥仅在本次响应中返回。此后 24 小时内,每次投递都会同时使用新旧两个密钥签名。轮换免费。
请求示例
curl -X POST "https://domscan.net/v1/webhooks/whe_3f1c0a9b8e7d6c5b4a39281706f5e4d3/rotate-secret" \
-H "X-API-Key: $DOMSCAN_API_KEY"
响应示例
{
"endpoint": {
"id": "whe_3f1c0a9b8e7d6c5b4a39281706f5e4d3",
"status": "active",
"secret_hint": "4b7a",
"previous_secret_expires_at": "2026-10-11T12:00:00.000Z"
},
"secret": "whsec_...",
"previous_secret_expires_at": "2026-10-11T12:00:00.000Z",
"grace_period_seconds": 86400
}
响应字段
| 字段 | 类型 |
|---|---|
endpoint |
object |
endpoint.id |
string |
endpoint.url |
string |
endpoint.description |
string | null |
endpoint.events[] |
string[] |
endpoint.status |
string |
endpoint.disabled_reason |
string | null |
endpoint.consecutive_failures |
integer |
endpoint.secret_hint |
string |
endpoint.previous_secret_expires_at |
string | null |
endpoint.secret_rotated_at |
string | null |
endpoint.last_success_at |
string | null |
endpoint.last_failure_at |
string | null |
endpoint.last_error |
string | null |
endpoint.created_at |
string |
endpoint.updated_at |
string |
endpoint.disabled_at |
string | null |
secret |
string |
previous_secret_expires_at |
string |
grace_period_seconds |
integer |
查询参数
| 参数 | 类型 | 说明 |
|---|---|---|
| limit | integer | 返回的投递记录数量,范围为 1 到 100,默认为 50。 |
列出最近的投递记录,包括状态、尝试次数、HTTP 响应、已扣积分和退款。投递记录保留 30 天。
响应字段
| 字段 | 类型 |
|---|---|
endpoint_id |
string |
deliveries[] |
object[] |
deliveries[] |
object |
deliveries[].id |
string |
deliveries[].endpoint_id |
string |
deliveries[].event_id |
string |
deliveries[].event_type |
string |
deliveries[].status |
string |
deliveries[].attempts |
integer |
deliveries[].next_attempt_at |
string | null |
deliveries[].last_attempt_at |
string | null |
deliveries[].response_status |
integer | null |
deliveries[].last_error |
string | null |
deliveries[].credits_charged |
integer |
deliveries[].refunded |
boolean |
deliveries[].created_at |
string |
deliveries[].delivered_at |
string | null |
响应示例
{
"endpoint_id": "example",
"deliveries": [
{
"id": "example-id",
"endpoint_id": "example",
"event_id": "example",
"event_type": "domain",
"status": "pending",
"attempts": 1,
"next_attempt_at": "2026-08-27T12:00:00Z",
"last_attempt_at": "2026-08-27T12:00:00Z",
"response_status": 1,
"last_error": "example",
"credits_charged": 1,
"refunded": false,
"created_at": "2026-08-27T12:00:00Z",
"delivered_at": "2026-08-27T12:00:00Z"
}
]
}
请求格式
每条提醒都是带有 JSON 正文的 POST 请求。同一事件的 id 字段保持不变,并会在 X-DomScan-Event-Id 中重复出现,因此您可以忽略已经处理过的重试。
POST /domscan HTTP/1.1
Content-Type: application/json
X-DomScan-Event: domain.expiring_30
X-DomScan-Event-Id: evt_6f1d2c3b4a5948e7b6c5d4e3f2a1b0c9
X-DomScan-Timestamp: 1791633600
X-DomScan-Signature: sha256=...
{
"id": "evt_6f1d2c3b4a5948e7b6c5d4e3f2a1b0c9",
"type": "domain.expiring_30",
"created": "2026-10-10T12:00:00.000Z",
"data": {
"domain": "acme.io",
"previous_status": "registered",
"current_status": "expiring_soon",
"expiry_date": "2026-11-09T00:00:00Z",
"days_until_expiry": 30,
"checked_at": "2026-10-10T12:00:00.000Z"
}
}
验证签名
使用端点密钥,对 X-DomScan-Timestamp 的值、一个英文句点和原始请求正文依次拼接后的内容计算 HMAC-SHA256。以恒定时间方式将结果与 X-DomScan-Signature 比较,并拒绝时间戳超过 5 分钟的请求。
下面的示例会校验请求头中的每一个签名,因此在密钥轮换期间也能正常工作。
import crypto from 'node:crypto';
// rawBody: the request body exactly as received, before JSON parsing.
function verifyDomScanWebhook(rawBody, headers, secret) {
const timestamp = headers['x-domscan-timestamp'];
const header = headers['x-domscan-signature'] || '';
if (!/^\d{10}$/.test(timestamp || '')) return false;
if (Math.abs(Date.now() / 1000 - Number(timestamp)) > 300) return false;
const expected = Buffer.from('sha256=' + crypto
.createHmac('sha256', secret)
.update(timestamp + '.' + rawBody)
.digest('hex'));
// One entry normally; two during a secret rotation (new secret first).
return header.split(',').some((entry) => {
const candidate = Buffer.from(entry.trim());
return candidate.length === expected.length &&
crypto.timingSafeEqual(candidate, expected);
});
}
轮换签名密钥
轮换后的 24 小时宽限期内,X-DomScan-Signature 中包含以英文逗号分隔的两个签名,新密钥的签名在前,如下所示。只要其中任意一项与您信任的密钥匹配,就接受该请求;部署好新密钥后,再停止信任旧密钥。在宽限期内再次轮换时,更早的旧密钥会立即失效。
X-DomScan-Signature: sha256=<new>,sha256=<previous>
重试与自动暂停
请在 8 秒内返回任意 2xx 状态码以确认收到提醒。重定向、其他状态码和超时都会按指数退避(1、4、16、64 和 256 分钟)重试,总共最多尝试 6 次。连续失败 15 次后,端点会被暂停;请通过 PATCH 或在监控设置中重新启用。
端点因连续失败被暂停时,端点所有者会收到一封邮件,内含端点主机、最后一次错误以及监控设置的链接。修复端点后,可在监控设置中重新启用,或使用 PATCH 并将 enabled 设为 true。启用会将失败次数重置为零。
关注列表提醒订阅
为关注的项目订阅您需要的提醒。每个订阅监控一个主机名、TLD 或品牌域名,您可以选择要接收其中哪些事件。事件会发送到您已签名的 Webhook 端点和应用内提醒。
| 类型 | 事件 | 触发时机 |
|---|---|---|
ssl | ssl.expiring ssl.expired ssl.changed | 当主机名提供的证书在 ssl_expiring_days(30、14、7 或 1,默认 14)天内到期时触发 ssl.expiring,每张证书每个阈值触发一次。每张过期证书触发一次 ssl.expired。当连续两次检查都发现新的证书指纹时触发 ssl.changed,载荷会说明签发机构是否发生变化。 |
price | price.dropped | 当某个 TLD 在指定注册商或最低价注册商处的注册价或续费价,相比上次提醒以来的最高价下降至少 drop_percent,或达到 target_price 及以下时触发。价格来自每日价格快照,每个快照只评估一次。 |
dns | dns.changed | 当任意主机名的被监控记录类型(A、AAAA、MX、NS、TXT 或 CNAME)在连续两次已确认的查询中返回相同的新结果时触发。 |
typosquat | typosquat.detected | 当品牌域名的仿冒域名被新注册,并经权威注册信息查询确认时触发。对仿冒域名的首次完整扫描只用于建立基线,不会发出提醒。 |
只有确凿的证据才会触发事件。TLS 握手失败、失败或超时的 DNS 查询、缺失的价格,以及被拦截或被限流的查询都属于未知结果:它们不会改变任何状态,也不会发出提醒或扣费。订阅的首次已确认检查会建立其基线。
检查会自动运行:证书每 12 小时一次,DNS 记录每小时一次(首次发现变更 15 分钟后会再做一次确认检查),价格每 2 小时对照每日快照检查一次,仿冒域名以每批 30 个的方式处理,每天完整扫描一遍。出现未知结果后,下一次尝试会更早进行。
创建订阅和运行检查均免费。每条以 2xx 响应送达 Webhook 端点的提醒收费 2 积分,与其他监控提醒相同。送达失败的会退款。每个账户最多可有 100 个订阅,其中仿冒域名订阅最多 20 个。
创建订阅。type 决定适用哪些字段:ssl、dns 和 typosquat 使用 domain;price 使用 tld、registrar、price_type、drop_percent 和 target_price。不适用于该类型的字段会被拒绝。
请求体
| 参数 | 类型 | 说明 |
|---|---|---|
| type | string | ssl、price、dns 或 typosquat。必填。 |
| domain | string | ssl 和 dns 要监控的主机名,或 typosquat 的品牌域名。 |
| tld | string | price 要监控的 TLD,例如 com。 |
| registrar | string | price 的注册商 ID。省略则监控价格最低的注册商。 |
| events | string[] | 要接收的事件。默认为该类型的全部事件。 |
| ssl_expiring_days | integer | ssl.expiring 的到期前天数:30、14、7 或 1。默认 14。 |
| price_type | string | registration(默认)或 renewal。 |
| drop_percent | number | 降幅达到该百分比时提醒,范围 1 到 95。 |
| target_price | number | 当以 USD 计的价格达到该金额或更低时提醒。价格订阅需要 drop_percent、target_price,或两者都设置。 |
| record_types | string[] | dns 要监控的记录类型。默认为 A、AAAA、MX、NS、TXT 和 CNAME。 |
请求示例
curl -X POST "https://domscan.net/v1/watchlist/alerts" \
-H "X-API-Key: $DOMSCAN_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"type": "price",
"tld": "com",
"registrar": "porkbun",
"price_type": "renewal",
"drop_percent": 10,
"target_price": 9.5
}'
响应示例
{
"subscription": {
"id": "mas_8c1f0e2d3b4a59687766554433221100",
"type": "price",
"target": "com",
"registrar": "porkbun",
"events": ["price.dropped"],
"status": "active",
"price_type": "renewal",
"drop_percent": 10,
"target_price": 9.5,
"currency": "USD",
"observed": null,
"last_check_status": null,
"next_check_at": "2026-10-10T12:00:00.000Z"
}
}
响应字段
| 字段 | 类型 |
|---|---|
subscription |
object |
subscription.id |
string |
subscription.type |
string |
subscription.target |
string |
subscription.registrar |
string | null |
subscription.events[] |
string[] |
subscription.status |
string |
subscription.ssl_expiring_days |
integer | null |
subscription.price_type |
string | null |
subscription.drop_percent |
number | null |
subscription.target_price |
number | null |
subscription.currency |
string | null |
subscription.record_types[] |
string[] |
subscription.observed |
object | null |
subscription.last_check_at |
string | null |
subscription.last_check_status |
string | null |
subscription.last_error |
string | null |
subscription.next_check_at |
string | null |
subscription.created_at |
string |
subscription.updated_at |
string |
列出您的订阅,包含最新的已确认证据和检查状态、每种类型支持的事件、检查计划以及提醒价格。
响应字段
| 字段 | 类型 |
|---|---|
subscriptions[] |
object[] |
subscriptions[] |
object |
subscriptions[].id |
string |
subscriptions[].type |
string |
subscriptions[].target |
string |
subscriptions[].registrar |
string | null |
subscriptions[].events[] |
string[] |
subscriptions[].status |
string |
subscriptions[].ssl_expiring_days |
integer | null |
subscriptions[].price_type |
string | null |
subscriptions[].drop_percent |
number | null |
subscriptions[].target_price |
number | null |
subscriptions[].currency |
string | null |
subscriptions[].record_types[] |
string[] |
subscriptions[].observed |
object | null |
subscriptions[].last_check_at |
string | null |
subscriptions[].last_check_status |
string | null |
subscriptions[].last_error |
string | null |
subscriptions[].next_check_at |
string | null |
subscriptions[].created_at |
string |
subscriptions[].updated_at |
string |
total |
integer |
available_types |
object |
available_types.ssl[] |
string[] |
available_types.price[] |
string[] |
available_types.dns[] |
string[] |
available_types.typosquat[] |
string[] |
policy |
object |
policy.credits_per_delivered_alert |
integer |
policy.check_credits |
integer |
policy.unknown_checks_charged |
boolean |
policy.max_subscriptions |
integer |
policy.max_typosquat_subscriptions |
integer |
policy.ssl_expiring_days[] |
integer[] |
policy.default_ssl_expiring_days |
integer |
policy.record_types[] |
string[] |
policy.price_types[] |
string[] |
policy.check_interval_minutes |
object |
policy.confirmation_checks |
object |
响应示例
{
"subscriptions": [
{
"id": "example-id",
"type": "ssl",
"target": "example",
"registrar": "example",
"events": [
"ssl.expiring"
],
"status": "active",
"ssl_expiring_days": 30,
"price_type": "registration",
"drop_percent": 0.5,
"target_price": 0.5,
"currency": "USD",
"record_types": [
"A"
],
"observed": {},
"last_check_at": "2026-08-27T12:00:00Z",
"last_check_status": "baseline",
"last_error": "example",
"next_check_at": "2026-08-27T12:00:00Z",
"created_at": "2026-08-27T12:00:00Z",
"updated_at": "2026-08-27T12:00:00Z"
}
],
"total": 1,
"available_types": {
"ssl": [
"ssl.expiring"
],
"price": [
"price.dropped"
],
"dns": [
"dns.changed"
],
"typosquat": [
"typosquat.detected"
]
},
"policy": {
"credits_per_delivered_alert": 2,
"check_credits": 0,
"unknown_checks_charged": false,
"max_subscriptions": 1,
"check_interval_minutes": {},
"max_typosquat_subscriptions": 1,
"ssl_expiring_days": [
1
],
"default_ssl_expiring_days": 1,
"record_types": [
"A"
],
"price_types": [
"registration"
],
"confirmation_checks": {}
}
}
获取一个订阅,包含其最新的已确认证据和最近 20 个事件。
响应字段
| 字段 | 类型 |
|---|---|
subscription |
object |
subscription.id |
string |
subscription.type |
string |
subscription.target |
string |
subscription.registrar |
string | null |
subscription.events[] |
string[] |
subscription.status |
string |
subscription.ssl_expiring_days |
integer | null |
subscription.price_type |
string | null |
subscription.drop_percent |
number | null |
subscription.target_price |
number | null |
subscription.currency |
string | null |
subscription.record_types[] |
string[] |
subscription.observed |
object | null |
subscription.last_check_at |
string | null |
subscription.last_check_status |
string | null |
subscription.last_error |
string | null |
subscription.next_check_at |
string | null |
subscription.created_at |
string |
subscription.updated_at |
string |
events[] |
object[] |
events[] |
object |
events[].id |
string |
events[].event_type |
string |
events[].detected_at |
string |
events[].published_at |
string | null |
events[].data |
object |
响应示例
{
"subscription": {
"id": "example-id",
"type": "ssl",
"target": "example",
"registrar": "example",
"events": [
"ssl.expiring"
],
"status": "active",
"ssl_expiring_days": 30,
"price_type": "registration",
"drop_percent": 0.5,
"target_price": 0.5,
"currency": "USD",
"record_types": [
"A"
],
"observed": {},
"last_check_at": "2026-08-27T12:00:00Z",
"last_check_status": "baseline",
"last_error": "example",
"next_check_at": "2026-08-27T12:00:00Z",
"created_at": "2026-08-27T12:00:00Z",
"updated_at": "2026-08-27T12:00:00Z"
},
"events": [
{
"id": "example-id",
"event_type": "ssl.expiring",
"detected_at": "2026-08-27T12:00:00Z",
"published_at": "2026-08-27T12:00:00Z",
"data": {}
}
]
}
通过 enabled 暂停或恢复订阅,或修改其 events、ssl_expiring_days、drop_percent、target_price 或 record_types。新的目标价格只会在之后的价格变动时提醒。
{ "enabled": false }
响应字段
| 字段 | 类型 |
|---|---|
subscription |
object |
subscription.id |
string |
subscription.type |
string |
subscription.target |
string |
subscription.registrar |
string | null |
subscription.events[] |
string[] |
subscription.status |
string |
subscription.ssl_expiring_days |
integer | null |
subscription.price_type |
string | null |
subscription.drop_percent |
number | null |
subscription.target_price |
number | null |
subscription.currency |
string | null |
subscription.record_types[] |
string[] |
subscription.observed |
object | null |
subscription.last_check_at |
string | null |
subscription.last_check_status |
string | null |
subscription.last_error |
string | null |
subscription.next_check_at |
string | null |
subscription.created_at |
string |
subscription.updated_at |
string |
响应示例
{
"subscription": {
"id": "example-id",
"type": "ssl",
"target": "example",
"registrar": "example",
"events": [
"ssl.expiring"
],
"status": "active",
"ssl_expiring_days": 30,
"price_type": "registration",
"drop_percent": 0.5,
"target_price": 0.5,
"currency": "USD",
"record_types": [
"A"
],
"observed": {},
"last_check_at": "2026-08-27T12:00:00Z",
"last_check_status": "baseline",
"last_error": "example",
"next_check_at": "2026-08-27T12:00:00Z",
"created_at": "2026-08-27T12:00:00Z",
"updated_at": "2026-08-27T12:00:00Z"
}
}
删除订阅。尚未发送的事件会被丢弃,不会扣费。
响应字段
| 字段 | 类型 |
|---|---|
id |
string |
deleted |
boolean |
响应示例
{
"id": "example-id",
"deleted": true
}
dns.changed 事件示例
{
"id": "evt_2b9c8d7e6f5a4b3c2d1e0f9a8b7c6d5e",
"type": "dns.changed",
"created": "2026-10-10T12:15:00.000Z",
"data": {
"domain": "partner-shop.example",
"changes": [
{
"record_type": "MX",
"before": ["10 mx1.mail.example"],
"after": ["10 mx.other-mail.example"],
"added": ["10 mx.other-mail.example"],
"removed": ["10 mx1.mail.example"],
"first_seen_at": "2026-10-10T12:00:00.000Z"
}
],
"confirmed_checks": 2,
"confirmed_at": "2026-10-10T12:15:00.000Z",
"subscription_id": "mas_8c1f0e2d3b4a59687766554433221100"
}
}