Full Threat Analysis
Changed onComprehensive threat intelligence check for IPs, domains, URLs, file hashes, email addresses and phone numbers.
An email address or a phone number is recognised automatically and answered from the dataset only, at every enrichment level: verdict (malicious | suspicious | unknown, never clean), recommendedAction (block | review | unverified) and reasons. Pass country for a phone number in national format.
Enrichment Levels:
- basic - Malicious status, reputation counters, sources, blocklist counters, plus whatever the dataset holds (geo, whois, certificates, vulnerabilities, dns, …). No risk score.
- standard (default) - Basic + risk score, classification, confidence, MITRE mapping, cross-correlation, ASN reputation, OTX context
- full - Standard + detection timeline and related infrastructure
- fast - Standard's evidence and scoring, read from the cache only: no live DNS, OTX or other upstream call before the answer. What the cache did not hold is listed in pending and fetched in the background, so a re-check a few seconds later is complete. A hash is looked up in the dataset, then on CIRCL for at most ~2.5 s (no OTX); a lookup still running then (or not started yet, every lookup slot busy) answers lookupStatus: "unknown" with pending: ["circl"], plus lookupQueued: false when not even a background slot was free to start it later — the next check starts it. Email addresses and phone numbers answer as at standard.
With no target parameter at all, answers a minimal 200 body (malicious: false + dataTrust/evidence) instead of an error.
Request
- Base URLhttps://api.ismalicious.com
- Auth
- API key in header X-API-KEY
- or HTTP bearer
- or HTTP basic
Query parameters
IP address, domain, URL, file hash, email address or phone number to check. Supply this or one of the ip / domain / hash aliases. A phone number is best sent in E.164 (+33612345678), URL-encoded: an unencoded + reaches the server as a space.
Alias for query restricted in intent to IP addresses
Alias for query restricted in intent to domains
Alias for query restricted in intent to file hashes (MD5/SHA1/SHA256)
Enrichment level: basic, standard, full, or fast. An unknown value reads as standard, so a client may send fast to a server that predates it
ISO 3166-1 alpha-2 country for a phone number written in national format (06 12 34 56 78 with FR → +33612345678). Ignored for every other indicator, and for a number written internationally
Response
Threat analysis response. Field availability depends on the entity type, the enrichment level, and the dataset — see the schema description.
Example response
{
"apiVersion": "v2",
"classification": {
"indicators": [
{
"category": "phishing",
"type": "source_category"
}
],
"primary": "safe"
},
"confidence": {
"factors": [
{
"name": "source_agreement"
}
],
"level": "high"
},
"dataTrust": {
"certificates": {
"source": "tls",
"state": "found"
}
},
"email": {
"address": "billing@paypa1-secure.com",
"domain": "paypa1-secure.com",
"domainReputation": {
"lookupStatus": "found"
},
"localPart": "billing"
},
"enrichmentLevel": "standard",
"entity": "billing@paypa1-secure.com",
"firstSeen": "2026-08-25T14:17:40Z",
"hashInfo": {
"hash": "44d88612fea8a8f36de82e1278abb02f",
"hashType": "md5"
},
"infrastructure": {
"attributes": [
"cloud",
"saas"
],
"sources": [
{
"category": "infrastructure",
"id": "azure-ip-ranges",
"name": "Azure - Published IP Ranges",
"threatClass": "infrastructure"
}
]
},
"lastSeen": "2026-09-20T06:00:00Z",
"lastUpdated": "2026-09-01T00:00:00Z",
"lookupStatus": "unknown",
"pending": [
"dns",
"otx"
],
"phone": {
"countryCallingCode": "33",
"e164": "+33612345678",
"input": "06 12 34 56 78",
"resolvedWith": "country"
},
"pwnedPassword": {
"corpusUpdatedAt": "2026-09-30T18:00:00+00:00",
"count": 52256179,
"hashType": "ntlm",
"source": "Have I Been Pwned — Pwned Passwords",
"sourceUrl": "https://haveibeenpwned.com/Passwords"
},
"recommendedAction": "block",
"riskScore": {
"factors": [
{
"name": "domain_age"
}
],
"level": "safe"
},
"type": "email",
"verdict": "malicious"
}Changes
- breaking
the
response's property type changed fromobjectnulltoarraynullfor status - info
added the optional property
//to the response with the status
- breaking
- info
added the optional property
to the response with the status - info
added the optional property
/to the response with the status
- info