args, and attach somewhere to send matches.
Availability: every plan with a license in force. Ten data sources need a plan feature of their own, listed in Data sources.
Cost: no metered allowance. Each monitor holds one Monitored Assets slot from creation until you delete it. Updates take no slot. See What your plan allows.
Data sources
alert_system_service_get_service_list returns the catalog of sources as a plain array, ordered by id, with no pagination.
Sources with no plan feature in the table are on every plan. Without the feature a source needs, creating or updating a monitor on it returns
403 with {"detail": "This feature is not included in your plan."}.
BIN-CVV (7) and Hacker Forum DB (8) are legacy sources. Monitors already on them stay readable, editable and deletable, and the dashboard no longer offers them for new monitors. For data broker listings, use Data Brokers (17). For cards offered for sale, use Credit Card (2) with "saleCategory": "on_sale" in args.
Each catalog entry tells you how to build a monitor on that source:
id— the value you send asservice. Take it from the catalog instead of hard-coding it.name— the internal key, for examplephishing. Email templates show this value.alias— the display label.slug— the key of the matching search, for exampledata_broker_search.is_active— whether the source runs. Monitors on an inactive source do not run.args_schema— the template for the asset. See Describe the asset.frequency— the fastest cadence the source allows. See How often it runs.service_type—syncorasync. See What a run does.excludable_fields— the result fields an exclusion can match.filterable_fields,sortable_fields— the result fields you can filter and sort on when you read matches.
alert_system_service_get_service_detail returns one source by id.
Describe the asset
args_schema has one key, params: a list of parameters, each with a name, a type, a required flag and often a hint and an example. Your monitor’s args is an object that supplies those parameters. It is the asset under watch.
The platform checks args against the schema on create and update:
- A key the schema does not define is refused:
Unknown parameter 'domain' not defined in schema. - A missing required parameter is refused:
Required parameter 'query' is missing. - Each value is checked against its type (
Int,Float,Boolean,String,Array[…]) and any allowed values the schema lists. - The key
createdAtis reserved and refused.
args_schema is the full reference for each source.
How lines and words in
query are read. On Distinct Leak (1) and Leak Extended Search (13), the whole text is one search, and a line break counts as a space. Join words with AND: john AND doe matches both words, while john doe matches nothing. On Certificate (3), each line of query is a separate search. On Credit Card (2), a result matching any one line is enough.
Leak Filter monitors are checked before they save. Create and update ask the Filtered credentials service whether it would run the search. A domain it blocks, or a domain it has already counted at more than 5,000,000 leaked records, is refused with
400 and the service’s reason in error. A domain it has not counted yet is accepted. See Filtered credentials.Create a monitor
alert_system_alert_create_alert_rule takes the source, the asset, where to deliver and an optional cadence. This monitor watches phishing references to acme.com and emails one recipient with the organization’s Default Template:
Three rules tie delivery together:
- A monitor needs somewhere to send matches. Send a non-empty
recipientslist, awebhook, or both. - Email needs a template. When
recipientsis not empty,email_templateis required. A webhook-only monitor needs no template and no sender. - Everything must be yours. Recipients, sender, template and webhook must belong to your organization.
201 with the monitor:
id— the monitor ID. Webhook payloads carry it asalert_rule_id.total_alerts_count— matches that have at least one result that is not excluded.total_matches_count— results that are not excluded, across all of the monitor’s matches.last_run— the end of the last window a run covered.nulluntil the first run finishes.needs_attention—truewhen the source rejected the monitor’sargs. See What a run does.is_deleted,deleted_at,deleted_by,deletion_snapshot— set when the monitor is deleted.deleted_byis the dashboard user who deleted it, and staysnullwhen an API key deleted it.
What your plan allows
Two checks run before a monitor is saved, in this order. The source must be in your plan. Create and update return403 when your plan lacks the source’s feature, when service is missing or not a number, or when it is not a known source. They return the same body when your license is not in force:
409:
limitis your plan’s Monitored Assets plus any Extra Monitored Assets packs.- The count is live. Deleting a monitor frees its slot at once, and the next create succeeds.
- Updates never take a slot, even when you change the source.
How often it runs
frequency sets the cadence:
Three rules decide the cadence a monitor gets:
- A source sets a floor. A monitor never runs faster than its source’s catalog
frequency. Sending a fasterfrequencyreturns400, for exampleThe selected frequency is more frequent than allowed. The maximum frequency for this service is Weekly. - Leaving
frequencyout uses your organization’s default. If the default is faster than the source allows, the monitor gets the source’s floor instead. Leaving it out is never refused. - The default applies at creation only. Changing it does not change existing monitors.
alert_system_setting_get_organization_alert_frequency and alert_system_setting_update_organization_alert_frequency. Both use one field, default_alert_frequency, which takes the six values above. It starts as daily.
What a run does
- The first run starts right away. Creating a monitor queues its first run.
- The schedule is checked hourly. Every hour the platform starts each monitor whose interval has passed since its last run. An
asyncmonitor also waits until its previous job has finished. - Each run covers the time since the previous one. The first window starts when you create the monitor, so a monitor never reports results from before that moment.
syncsources record results during the run.asyncsources start a job on the source and record the results when it finishes. Unfinished jobs are checked every hour.- Results become a match. A run that finds nothing records no match. Telegram, Data Brokers and Domain Search keep at most 100 results on a monitor’s first run and 5,000 on later runs. Discord keeps about 5,000 per run. When a Data Brokers run hits its cap, the next run picks up the remainder.
- Delivery needs a result that is not excluded. A match whose results are all excluded is stored but not sent.
args, the platform sets needs_attention to true and stops running the monitor. It resumes when you update the monitor with different args, which sets needs_attention back to false. Saving the same args again does not reset it.
List monitors
alert_system_alert_get_alert_rule_list returns your monitors, newest first, in pages.
The response is
{count, next, previous, results}. Raise page until next is null. The next and previous URLs point at an internal service, so don’t call them.
alert_system_alert_get_alert_rule_detail returns one monitor by id, deleted or not.
Update a monitor
alert_system_alert_update_alert_rule is a PUT with the monitor id in the path.
- Send
name,serviceandargsevery time. Optional fields you leave out keep their stored values. - Send delivery every time. Every update needs a non-empty
recipientslist or awebhook, even when the stored monitor already has one. "recipients": []removes all recipients. Send awebhookin the same call."webhook": nullkeeps the current webhook. You can point the monitor at another webhook. To stop webhook delivery, delete the monitor and create it again without one.- Update runs the create checks again. The source must be in your plan (
403),argsmust match the schema,frequencymust respect the source’s floor, and Leak Filter monitors are checked again. - Changing
argssetsneeds_attentionback tofalse. - A deleted monitor cannot be updated. The call returns
404.
Delete a monitor
alert_system_alert_delete_alert_rule stops a monitor and returns 204.
- Frees the monitor’s Monitored Assets slot at once.
- Records the monitor’s last settings in
deletion_snapshot, withdeleted_at, and setsis_deletedtotrue. - Detaches its recipients, sender, template and webhook, so you can delete those afterwards.
- Deletes its exclusion list.
- Frees its
namefor a new monitor.
include_deleted=true. Deleting it again returns 404.
Errors
A missing or mistyped field other thanservice returns 400 with the field name as the key, for example {"name": ["This field is required."]}. A missing or non-numeric service returns 403, as described in What your plan allows. Every other 400 from create and update has an error key that holds the message, as a string or as a one-item list: