Supported types
IP address
Both IPv4 and IPv6 addresses. Queried against VirusTotal and AbuseIPDB.
Domain
Fully qualified domain names. Queried against VirusTotal and Robtex.
Hash
MD5, SHA-1, or SHA-256 file digests. Queried against VirusTotal and PolySwarm.
Type reference
| Display type | IoCType value | Example value |
|---|---|---|
IPv4 | ip | 198.51.100.42 |
IPv6 | ip | 2001:db8::1 |
domain | domain | malicious-domain.example.com |
hash/md5 | hash | d41d8cd98f00b204e9800998ecf8427e |
hash/sha1 | hash | da39a3ee5e6b4b0d3255bfef95601890afd80709 |
hash/sha256 | hash | e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 |
IoCType union ('ip' | 'domain' | 'hash') is the internal routing key. The display type shown in the UI and included in the meta SSE event is more specific and derived after detection.
Auto-detection
When you submit a value without specifying its type, CyberThreat AI detects it automatically using Zod schema validation. Detection runs in a fixed priority order insidedetectIocType (src/scripts/core/iocValidators.ts):
IP address check
The value is tested against
z.union([z.ipv4(), z.ipv6()]). If it matches, detection stops and the type is 'ip'. The display subtype (IPv4 or IPv6) is resolved later by checking whether the normalized string contains a colon (:).Domain check
The value is tested against
z.hostname().regex(/\.[a-z]{2,}$/i). The regex requires at least one dot followed by a TLD of two or more letters, so bare hostnames without a TLD are rejected.Unrecognized values
If the submitted value does not pass any of the three schema checks,detectIocType returns null. The API responds with an error and no analysis is performed.