acme.com at one point in time. Monitors keep watching after the scan and raise a look-alike alert when something changes. There are two kinds:
- Scan-wide monitors cover a whole scan. They alert when new look-alikes appear, or when a variation of your domain gets name servers.
- Per-domain monitors cover one discovered look-alike, such as
acme-login.com. They alert on DNS records, open web ports, phishing databases, risk score, page content and spoofing of your brand.
These are not the monitors of the Alert System, whose results are matches. Look-alike monitors do not use your Monitored Assets capacity, and look-alike alerts do not go through your delivery settings.
403:
429 or the capacity 409 described in Plans and quotas. Two other kinds of 429 can come back:
"message": "Rate limit exceeded"is the per-second rate limit or your API Calls allowance. See Rate limits."detail": "Request was throttled. Expected available in 12 seconds."is the domain monitoring service’s own limit of 180 requests a minute. Every API key and dashboard user of your organization shares it. Wait the seconds the message gives. The response has noRetry-Afterheader.
How alerts reach you
Look-alike alerts are not sent by email or webhook. You read them from the alerts inbox, and the polling recipe below keeps an integration up to date. Monitors accept arecipients list, but no email is sent to those addresses.
Watch the whole scan
Two monitors belong to the scan itself. Both are off until you turn them on. Switch them withanalysis_update:
Send
false to turn one off. analysis_detail returns both fields with their current state. Scan-wide monitors do not appear in the monitor list. One alert from them can cover several domains, listed in its result_domains.
Monitor a discovered domain
Pick look-alikes from the scan’s results and send them with the conditions to watch tocreate_analysis_monitor:
201 with a list of the monitors on those domains. Each one carries its uid, domain, analysis_id, conditions, enabled, recipients and timestamps. The list can also hold monitors you paused or deleted on those domains before, so pick the new one by created_at. Keep its uid to change or delete the monitor.
Three rules decide which conditions make sense for a domain:
- A, MX and port conditions alert only when something first appears. On a domain that already has an A record, an MX record, or both web ports open, that condition never fires. Read
a_record,mx_record,http_openandhttps_openon the scan result first. - Spoofing conditions need a logo or brand keywords on the scan. Without one,
create_analysis_monitorrefusesis_spoofingandcontent_change_and_spoofwith400.monitor_updatedoes not check, so attach a logo or keywords before you add a spoofing condition to an existing monitor. Set up a brand library shows how to attach them. - One active monitor per domain. A domain that already has an enabled monitor returns
400and lists the domain indomains. A monitor you deleted while it was enabled still counts. To resume a paused monitor, send"enabled": truetomonitor_updateinstead of creating a new one.
Change, pause or delete a monitor
monitor_update takes three fields:
enabled: required. It is applied on every update, so sendtrueto keep the monitor running while you change something else.conditions: replaces the list of conditions.recipients: replaces the list of addresses.
{"enabled": false} to pause a monitor. A paused monitor keeps its alerts.
monitor_delete returns 204. It removes the monitor and its alerts from the inbox. Deleting a scan does the same for all of its monitors.
A monitor deleted while enabled keeps blocking its domain: create_analysis_monitor refuses that domain with 400 afterwards. To stop alerts for a while, pause the monitor instead. If you may want to watch the domain again, pause the monitor before you delete it.
Monitors also set the triage status of the domain in the scan’s results. Creating or enabling a monitor sets it to monitoring. Pausing or deleting the monitor sets it to reviewed.
List monitors
analysis_monitors lists the per-domain monitors of one scan, newest first:
The response has
count, next, previous and results. Raise page until next is null.
monitor_detail returns one monitor.
Read the alerts inbox
alerts_list returns every look-alike alert of your organization, across all scans and monitors, newest first:
Leave out
date_sort: the default order is newest first.
alert_type_counts counts the alerts per condition across every page of the filtered set. full_message is kept for older integrations: read change_detail instead. Raise page until next is null.
monitor_alerts returns the 10 newest alerts of one monitor, with the total in count. To page through all of them, call the inbox with monitor_id.
Mark alerts seen
Send the alertuid values and seen to alerts_update_seen:
seen is required: send true to mark alerts seen, false to mark them unseen. The call returns the updated alerts as a list. IDs that are valid UUIDs but do not exist are skipped. Send only alert uid values: an ID that is not a UUID returns 502. The seen state belongs to your organization, so the dashboard’s Alerts tab shows the same state.
To process new alerts on a schedule:
1
Fetch unread alerts
Call the inbox with
seen=false and page_size=100.2
Process them
Handle each alert in your own system, using
condition, severity and result_domains.3
Mark them seen
Send their
uid values with "seen": true.4
Repeat until the inbox is empty
Fetch page 1 again until
count is 0. Alerts you mark seen leave the seen=false set, so the next unread alerts are always on page 1.Read one alert
alert_detail returns one alert by its uid, as a one-item list. Read the alert from index 0.
Errors
Errors from the API itself carrydetail. Errors from the domain monitoring service carry details, except its own 429, which carries detail. The per-second rate limit and the API Calls allowance carry message. Read the first of detail, details and message that the body contains. Every status is explained once in Handle API errors.