Domeinwachtrij
DomScan-API: Bewaak domeinen op vervaldatum- en beschikbaarheidswijzigingen. Ontvang waarschuwingen wanneer geregistreerde domeinen beschikbaar worden.
Domeinwachtrij
Bewaak domeinen op vervaldatum- en beschikbaarheidswijzigingen. Ontvang waarschuwingen wanneer geregistreerde domeinen beschikbaar worden.
Meld u aan met Google om toegang te krijgen tot uw persoonlijke domeinwatchlist met e-mailwaarschuwingen, webhooks en meer.
Ontvang meldingen via e-mail, Telegram, Slack, Discord of Webhook.
Haal alle domeinen op in uw wachtrij.
Gepagineerd: stuur limit (1 tot 100) mee en geef next_cursor terug als cursor. Antwoorden bevatten has_more en next_cursor. Zonder limit wordt de hele lijst teruggegeven. Zie paginering.
Voorbeeldantwoord
{
"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"
}
Antwoordvelden
| Veld | Type |
|---|---|
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 |
Voeg een domein toe aan uw wachtrij.
Inhoud van het verzoek
{
"domain": "mydomain.com",
"notify_email": "[email protected]"
}
Antwoordvelden
| Veld | Type |
|---|---|
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 |
Voorbeeldantwoord
{
"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
}
Verwijderen uit volglijst
curl -X DELETE -H "X-API-Key: your-api-key" "https://domscan.net/v1/watchlist?domain=mydomain.com"
Antwoordvelden
| Veld | Type |
|---|---|
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 |
Voorbeeldantwoord
{
"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
}
Snel verlopen
Gepagineerd: stuur limit (1 tot 100) mee en geef next_cursor terug als cursor. Antwoorden bevatten has_more en next_cursor. Zonder limit wordt de hele lijst teruggegeven. Zie paginering.
Voorbeeldantwoord
{
"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
}
Antwoordvelden
| Veld | Type |
|---|---|
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 |
Beschikbaar
Gepagineerd: stuur limit (1 tot 100) mee en geef next_cursor terug als cursor. Antwoorden bevatten has_more en next_cursor. Zonder limit wordt de hele lijst teruggegeven. Zie paginering.
Voorbeeldantwoord
{
"available_domains": [
{
"domain": "startupdrop.ai",
"status": "available",
"last_checked": "2026-04-14T08:30:00Z",
"check_count": 18
}
],
"total": 1,
"message": "Deze domeinen van uw volglijst zijn nu beschikbaar voor registratie!"
}
Antwoordvelden
| Veld | Type |
|---|---|
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 |
Webhooks voor meldingen
Ontvang monitoringmeldingen als ondertekende JSON-POST-verzoeken op uw eigen HTTPS-endpoints. Beheer endpoints met een API-sleutel, of via de Monitor-instellingen wanneer u bent aangemeld.
Gebeurtenistypen
| Monitor | Gebeurtenissen |
|---|---|
| Beschikbaarheid, vervaldatum en status van de watchlist | domain.available domain.expiring_30 domain.expiring_14 domain.expiring_7 domain.expiring_1 domain.status_change |
| Bewaking van domeinwijzigingen | domain.dns_changed domain.certificate_changed domain.registration_changed domain.hosting_changed domain.technology_changed domain.email_security_changed |
| Merkbewaking (nieuwe lookalike-registraties) | brand.threat_detected |
| Waarschuwingsabonnementen voor watchlist (certificaten, prijzen, DNS-records, lookalikes) | ssl.expiring ssl.expired ssl.changed price.dropped dns.changed typosquat.detected |
| Asynchrone taken (gratis, alleen voor taken aangemaakt met notify_webhook) | job.completed job.failed job.cancelled |
| Testgebeurtenis (gratis) | webhook.test |
Lees de gids voor de Webhookmeldingen-API
Prijzen
Elke melding die met een 2xx-reactie aan een endpoint wordt geleverd, kost 2 credits. Credits worden vlak voor de eerste poging gereserveerd en terugbetaald als de levering mislukt, wordt geannuleerd of het endpoint wordt verwijderd. Testgebeurtenissen zijn gratis. Bij een te laag saldo wordt de melding overgeslagen en wordt er niets in rekening gebracht.
Registreer een HTTPS-endpoint. De URL moet naar een openbaar adres wijzen. Laat events weg, of geef ["*"] door, om elk gebeurtenistype te ontvangen. Het ondertekeningsgeheim wordt alleen in dit antwoord teruggegeven.
Voorbeeldverzoek
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"]
}'
Voorbeeldantwoord
{
"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_..."
}
Antwoordvelden
| Veld | Type |
|---|---|
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 |
Toon uw endpoints met status, geabonneerde gebeurtenissen, aantal fouten en de laatste vier tekens van het geheim, samen met de beschikbare gebeurtenistypen en het leveringsbeleid.
Antwoordvelden
| Veld | Type |
|---|---|
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 |
Voorbeeldantwoord
{
"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"
}
Pauzeer of activeer een endpoint, wijzig de gebeurtenissen of pas de beschrijving aan. Bij het inschakelen van een endpoint wordt het aantal fouten gereset.
{ "enabled": true, "events": ["*"] }
Antwoordvelden
| Veld | Type |
|---|---|
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 |
Voorbeeldantwoord
{
"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"
}
}
Verwijder een endpoint. Openstaande leveringen worden geannuleerd en eventueel gereserveerde credits worden terugbetaald.
Antwoordvelden
| Veld | Type |
|---|---|
id |
string |
deleted |
boolean |
Voorbeeldantwoord
{
"id": "example-id",
"deleted": true
}
Verstuur één gratis webhook.test-gebeurtenis en geef het resultaat terug. Testgebeurtenissen worden niet opnieuw geprobeerd en tellen niet mee voor automatisch pauzeren.
Antwoordvelden
| Veld | Type |
|---|---|
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 |
Voorbeeldantwoord
{
"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
}
Vervang het ondertekeningsgeheim van een endpoint, ook van een gepauzeerd endpoint. Het nieuwe geheim wordt alleen in dit antwoord teruggegeven. De komende 24 uur wordt elke levering met zowel het nieuwe als het vorige geheim ondertekend. Roteren is gratis.
Voorbeeldverzoek
curl -X POST "https://domscan.net/v1/webhooks/whe_3f1c0a9b8e7d6c5b4a39281706f5e4d3/rotate-secret" \
-H "X-API-Key: $DOMSCAN_API_KEY"
Voorbeeldantwoord
{
"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
}
Antwoordvelden
| Veld | Type |
|---|---|
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 |
Queryparameters
| Parameter | Type | Beschrijving |
|---|---|---|
| limit | integer | Aantal leveringen dat wordt teruggegeven, van 1 tot 100. Standaard 50. |
Toon recente leveringen met status, pogingen, HTTP-reactie, in rekening gebrachte credits en terugbetalingen. Leveringsrecords worden 30 dagen bewaard.
Antwoordvelden
| Veld | Type |
|---|---|
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 |
Voorbeeldantwoord
{
"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"
}
]
}
Verzoekformaat
Elke melding is een POST-verzoek met een JSON-body. Het veld id blijft voor een gebeurtenis gelijk en wordt herhaald in X-DomScan-Event-Id, zodat u nieuwe pogingen die u al hebt verwerkt kunt negeren.
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"
}
}
Handtekeningen verifiëren
Bereken een HMAC-SHA256 van de waarde van X-DomScan-Timestamp, een punt en de ruwe body van het verzoek met het geheim van uw endpoint. Vergelijk het resultaat in constante tijd met X-DomScan-Signature en weiger verzoeken waarvan de tijdstempel meer dan 5 minuten oud is.
Het onderstaande voorbeeld controleert elke handtekening in de header en blijft dus werken tijdens een geheimrotatie.
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);
});
}
Een ondertekeningsgeheim roteren
Tijdens de respijtperiode van 24 uur na een rotatie bevat X-DomScan-Signature twee handtekeningen, gescheiden door een komma, met het nieuwe geheim eerst, zoals hieronder getoond. Accepteer een verzoek zodra een van de handtekeningen overeenkomt met een geheim dat u vertrouwt, implementeer het nieuwe geheim en vertrouw daarna het oude niet meer. Als u tijdens de respijtperiode opnieuw roteert, vervalt het oudere vorige geheim onmiddellijk.
X-DomScan-Signature: sha256=<new>,sha256=<previous>
Nieuwe pogingen en automatisch pauzeren
Geef binnen 8 seconden een 2xx-status terug om een melding te bevestigen. Omleidingen, andere statuscodes en time-outs worden met exponentiële backoff opnieuw geprobeerd (1, 4, 16, 64 en 256 minuten), tot in totaal 6 pogingen. Na 15 opeenvolgende mislukte pogingen wordt het endpoint gepauzeerd; schakel het weer in met PATCH of via de Monitor-instellingen.
Wanneer een endpoint na herhaalde fouten wordt gepauzeerd, ontvangt de eigenaar van het endpoint één e-mail met de host van het endpoint, de laatste fout en een link naar de Monitorinstellingen. Herstel het endpoint en schakel het daarna weer in via de Monitorinstellingen of met PATCH waarbij enabled op true staat. Door in te schakelen wordt de foutenteller op nul gezet.
Waarschuwingsabonnementen voor watchlist
Abonneer een gevolgd item op de waarschuwingen die u wilt ontvangen. Elk abonnement volgt één hostnaam, TLD of merkdomein en u kiest welke gebeurtenissen u ontvangt. Gebeurtenissen gaan naar uw ondertekende webhook-endpoints en naar uw waarschuwingen in de app.
| Type | Gebeurtenissen | Wanneer het afgaat |
|---|---|---|
ssl | ssl.expiring ssl.expired ssl.changed | ssl.expiring wanneer het certificaat van een hostnaam binnen ssl_expiring_days verloopt (30, 14, 7 of 1, standaard 14), eenmaal per certificaat en drempel. ssl.expired eenmaal per verlopen certificaat. ssl.changed wanneer bij twee opeenvolgende controles een nieuwe certificaatvingerafdruk wordt gezien; de payload geeft aan of de uitgever is gewijzigd. |
price | price.dropped | Wanneer de registratie- of verlengingsprijs van een TLD, bij één registrar of de goedkoopste, met minstens drop_percent daalt ten opzichte van de hoogste prijs sinds de laatste waarschuwing, of target_price of lager bereikt. Prijzen komen uit de dagelijkse prijssnapshot en elke snapshot wordt eenmaal beoordeeld. |
dns | dns.changed | Wanneer een gevolgd recordtype (A, AAAA, MX, NS, TXT of CNAME) van een willekeurige hostnaam bij twee opeenvolgende bevestigde opzoekingen hetzelfde nieuwe antwoord geeft. |
typosquat | typosquat.detected | Wanneer een lookalike van het merkdomein nieuw is geregistreerd, bevestigd door een gezaghebbende registratieopzoeking. De eerste volledige ronde over de lookalikes legt de uitgangssituatie vast en geeft geen waarschuwing. |
Alleen exact bewijs activeert een gebeurtenis. Een mislukte TLS-handshake, een DNS-opzoeking die mislukt of een time-out krijgt, een ontbrekende prijs en een opzoeking die wordt geblokkeerd of waarvoor een limiet geldt, zijn onbekend: ze wijzigen niets en geven nooit een waarschuwing of kosten. De eerste bevestigde controle van een abonnement legt de uitgangssituatie vast.
Controles draaien automatisch: certificaten elke 12 uur, DNS-records elk uur (met een bevestigingscontrole 15 minuten nadat een wijziging voor het eerst is gezien), prijzen elke 2 uur ten opzichte van de dagelijkse snapshot en lookalikes in batches van 30 met elke dag een volledige ronde. Na een onbekende controle volgt de volgende poging eerder.
Abonnementen aanmaken en controles uitvoeren is gratis. Elke waarschuwing die met een 2xx-respons naar een webhook-endpoint wordt geleverd, kost 2 credits, net als elke andere monitoringwaarschuwing. Mislukte leveringen worden terugbetaald en een account kan maximaal 100 abonnementen hebben, waarvan 20 voor lookalikes.
Maak een abonnement aan. type bepaalt welke velden gelden: domain voor ssl, dns en typosquat; tld, registrar, price_type, drop_percent en target_price voor price. Velden die niet bij het type horen, worden geweigerd.
Inhoud van het verzoek
| Parameter | Type | Beschrijving |
|---|---|---|
| type | string | ssl, price, dns of typosquat. Verplicht. |
| domain | string | Hostnaam om te volgen voor ssl en dns, of het merkdomein voor typosquat. |
| tld | string | TLD om te volgen voor price, bijvoorbeeld com. |
| registrar | string | Registrar-id voor price. Laat leeg om de goedkoopste registrar te volgen. |
| events | string[] | Te ontvangen gebeurtenissen. Standaard alle gebeurtenissen van het type. |
| ssl_expiring_days | integer | Dagen voor het verlopen voor ssl.expiring: 30, 14, 7 of 1. Standaard 14. |
| price_type | string | registration (standaard) of renewal. |
| drop_percent | number | Waarschuw bij een daling van minstens dit percentage, 1 tot 95. |
| target_price | number | Waarschuw wanneer de prijs in USD dit bedrag of lager bereikt. Een prijsabonnement heeft drop_percent, target_price of beide nodig. |
| record_types | string[] | Te volgen recordtypen voor dns. Standaard A, AAAA, MX, NS, TXT en CNAME. |
Voorbeeldverzoek
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
}'
Voorbeeldantwoord
{
"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"
}
}
Antwoordvelden
| Veld | Type |
|---|---|
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 |
Toon uw abonnementen met het laatst bevestigde bewijs en de controlestatus, de gebeurtenissen die elk type ondersteunt, het controleschema en de waarschuwingsprijs.
Antwoordvelden
| Veld | Type |
|---|---|
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 |
Voorbeeldantwoord
{
"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": {}
}
}
Haal één abonnement op met het laatst bevestigde bewijs en de 20 meest recente gebeurtenissen.
Antwoordvelden
| Veld | Type |
|---|---|
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 |
Voorbeeldantwoord
{
"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": {}
}
]
}
Onderbreek of hervat een abonnement met enabled, of wijzig de events, ssl_expiring_days, drop_percent, target_price of record_types. Een nieuwe doelprijs geeft alleen een waarschuwing bij een latere prijsbeweging.
{ "enabled": false }
Antwoordvelden
| Veld | Type |
|---|---|
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 |
Voorbeeldantwoord
{
"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"
}
}
Verwijder een abonnement. Gebeurtenissen die nog niet zijn verzonden, worden verwijderd en nooit in rekening gebracht.
Antwoordvelden
| Veld | Type |
|---|---|
id |
string |
deleted |
boolean |
Voorbeeldantwoord
{
"id": "example-id",
"deleted": true
}
Voorbeeld van een dns.changed-gebeurtenis
{
"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"
}
}