Phishing and Fraudulent Site Detection API
The Bolster Scan API can detect the following scams and threat categories in real-time:
- Zero-Day Phishing
- Tech Support Scams
- Gift Card Scams
- Survey Scams
- Adult Websites
- Drug Pharmacy (Drug Spam) Websites
- Illegal/Rogue Streaming Sites
- Gambling Websites
- Hacked Websites
- Cryptojacking / Cryptomining
Use the Scan API to submit the URLs you would like to have scanned. You can submit for a quick scan or full scan. Your Bolster enterprise license determines the limit on the number of scan requests you can submit.
Before You Start: Locate Your API Key
You will need to provide your Bolster API key to submit URLs for scan requests.
- Click the user dropdown on the right.
- Click Profile Information.
- Copy the API key displayed in your profile screen.
How to Use the Scan API
To use the Scan API, you complete the following steps:
- Submit the URL you want to scan.
- Query the results of the scan when complete.
Submitting a URL for Scanning
Your scan request requires the following information:
Endpoint:
/neo/scan
API host:
https://developers.bolster.ai/api
Your Bolster API key
To request a scan, submit the following request:
curl -X POST --header 'Content-Type: application/json' \
-d '{"apiKey": "<api_key>", "urlInfo": {"url": "<url_to_scan>"}}' \
https://developers.bolster.ai/api/neo/scan
Optionally, one or multiple tags can be added to the scanned URL. See Using Tags to Annotate Detections or allowed tags.
curl -X POST --header 'Content-Type: application/json' \
-d '{"apiKey": "<api_key>", "urlInfo": {"url": "<url_to_scan>"}, "tags": ["Watchlist"]}' \
https://developers.bolster.ai/api/neo/scan
Examples
curl -X POST --header 'Content-Type: application/json' \
-d '{"apiKey": "1f207653ec034ab9f04fbdd8e09fa7879205b4c85addeaa299da326167cc00a1", "urlInfo": {"url": "http://webidlogin101997.5gbfree.com/"}}' \
https://developers.bolster.ai/api/neo/scan
Response
The scan request will return a job ID and timestamp in JSON format:
{
"jobID": "ca1b827b-1f14-4e74-a242-ed17cc1808b0",
"timestamp": 1538090611675
}
Â
Querying the Scan Results
Submit the following request to query your scan results:
curl -X POST --header 'Content-Type: application/json' \
-d '{"apiKey": "<apiKey>", "jobID": "<jobID>", "insights": "basic"}' \
https://developers.bolster.ai/api/neo/scan/status
where <jobID > is the job ID returned by your scan request.
Example
curl -X POST --header 'Content-Type: application/json' \
-d '{"apiKey": "1f207653ec034ab9f04fbdd8e09fa7879205b4c85addeaa299da326167cc00a1", "jobID": "ca1b827b-1f14-4e74-a242-ed17cc1808b0", "insights": "basic"}'
https://developers.bolster.ai/api/neo/scan/status
Response
Results will be returned in JSON format.
Before the scan is completed, the response will return with “PENDING” status.
{
"job_id": "ca1b827b-1f14-4e74-a242-ed17cc1808b0",
"url": "http://webidlogin101997.5gbfree.com/",
"status": "PENDING",
"scan_start_ts": 1654129884891
}
Basic insights information are returned when “insights” is set to “basic” or “verbose” in the query.
{
"job_id": "ca1b827b-1f14-4e74-a242-ed17cc1808b0",
"status": "DONE",
"url": "http://webidlogin101997.5gbfree.com/",
"url_sha256": "a395e2130500750d34703f66c62c50ce99be0c7272b6763f6508c6bd473f1d74",
"disposition": "phish",
"brand": "paypal",
"scan_start_ts": 1654129884891,
"scan_end_ts": 1654129887641,
"error": false,
"tags": [
"Watchlist"
],
"insights": {
"insights_path": "https://checkphish.ai/insights/url/1654129884891/a395e2130500750d34703f66c62c50ce99be0c7272b6763f6508c6bd473f1d74",
"resolved": true,
"screenshot_path": "https://xxxx.xxxx.amazonaws.com/20220602/a395e2130500750d34703f66c62c50ce99be0c7272b6763f6508c6bd473f1d74_1654129884891.png",
 "dom_source_path": "https://xxxx.xxxx.amazonaws.com/20220602/a395e2130500750d34703f66c62c50ce99be0c7272b6763f6508c6bd473f1d74_1654129884891.txt",
"image_objects": [
{
"brand": "paypal",
"product": "paypal",
"object_type": "logo",
"prob": 0.78,
"image_height": 1080,
"image_width": 1920,
"width": 134.4,
"height": 32.4,
"x": 9.6,
"y": 5.4
}
]
}
}
The response includes the following information in JSON format:
- job_id: job ID of the scan
- status:  Status of whether the job has completed. Returns DONE when completed, PENDING when in progress.
- url: URL submitted for scanning
- url_sha256: SHA256 of the url submitted for scanning
- brand: Brand being targeted by the URL
- disposition: the list of dispositions can be found below
- scan_start_ts: Unix Timestamp of when the scan the triggered
- scan_end_ts: Unix Timestamp of when the scan ended
- categories: List of categories from our webpage category detection model
- tags: List of tags added
- insights: List of scan insights data, see below.
Basic insights data:
- insights_path: insights link
- screenshot_path: storage location of the screenshot for the scan
- dom_source_path: storage location of the DOM source for the scan
- resolved: true if the URL resolved. Else false
Verbose insights data:
- cert: SSL certification information
- parked: if the domain is parked domain.
- redirection_chain: a list of urls of the redirection chain if there’s any.
- last_scan_ts: last time the URL was scanned.
- past_phish: number of past phish count of IP address and hostname.
- passive_dns_list: a list of passive DNS entries of the IP address.
List of Dispositions
| Disposition description | Disposition identifier returned in response |
|---|---|
| Phishing Websites | phish |
| Gift Card Scams/ Survey Scams/Tech support scams | scam |
| Adult websitse | adult |
| Drug Spam/Drug Pharmacy Sites | drug_spam |
| Gambling websites | gambling |
| Suspicious websites | suspicious |
| Likely Phish websites | likely_phish |
| Cryptomining/Cryptojacking | cryptojacking |
| Illegal Streaming website websites | streaming |
| Hacked/Defaced websites | hacked_website |
| Mortgage Refinance Scam | mortgage |
| Clean Websites | clean |
List of Categories
See Intent Detection – Categories.
API Rate Limiting
Scan API requests are restricted to the rate specified by your Bolster enterprise license. If requests exceed this rate, the caller will receive the following error:
{
"error": {
"status_code": 429,
"status": "Request rate limit exceeded. Please try again later"
}
}