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" } }