File reputation (TCA-0101)
File reputation (TCA-0101)
The File Reputation (Malware Presence) service provides information about the malware status of requested samples. The status can be malicious, suspicious, known (goodware, confirmed to be non-malicious), or unknown.
The service supports single and bulk queries. Set the extended parameter to get more data about a sample, such as its trust factor, threat level, and malware family. Set the show_hashes parameter to get the MD5, SHA1, and SHA256 hashes of a sample.
This API is rate limited to 500 requests per second. If you go over the rate limit, or if you reach your daily or monthly quota, the service returns HTTP status code 429. See Response status codes.
Common use cases
The service looks up the hash in Spectra Intelligence and returns what the system knows about that file. It doesn't analyze the file, and it doesn't execute it.
If Spectra Intelligence has no record of a hash, upload the sample with the File upload (TCA-0202/0203) API. If the antivirus results for a sample are old, request a new scan with the Reanalyze file (TCA-0205) API.
- Fast malware triage. One lookup returns the classification status. Add
extended=trueto also get the threat level, the trust factor, the malware family, and the reason for the verdict. This data is usually sufficient to decide if a file needs an analyst. - Bulk hash checking. A bulk query takes up to 100 hashes per request, so you can check a long list without sending one request per hash. Such a list can come from an endpoint export, a phishing campaign, or a software inventory. Use
query_hashto match each result to your input. Do not use the order of the entries. - Enrichment. The reputation fields add context to alerts and indicator records in a SIEM, SOAR, or ticketing system. Use
first_seenandlast_seento find how long the system has known the file. Usethreat_nameandclassificationfor the family labels. Usereasonfor the basis of the verdict.
Be careful with the UNKNOWN status in all three of these use cases. UNKNOWN means that Spectra Intelligence has no classification for the file. It does not mean that the file is safe. See Sample with malware presence status UNKNOWN.
A classification is not permanent. When more information becomes available, Spectra Intelligence can change a suspicious sample to malicious or to known. An unknown hash also gets a classification after the sample comes into Spectra Intelligence, so a stored verdict can become incorrect.
Query the hashes that are important to you again, and use last_seen to find when the data of the sample last changed. For more information, see Deciding sample priority and Analysis rescans.
The file reputation data is not always sufficient. For the per-scanner detail behind the scanner_* fields, use Multi-AV scan records (TCA-0103). For static and dynamic analysis data, extracted files, and network indicators, use File analysis (TCA-0104).
General information about requests and responses
- The service is available at
https://data.reversinglabs.comand uses HTTP Basic authentication. See Getting started for credentials and your first request. - All requests support the format parameter. It has two options: xml and json.
- The default response format is xml. For bulk queries, the default response format is the same as the post_format.
- A bulk request must not contain more than 100 hashes. A request that contains more than 100 hashes returns HTTP status code 413.
- POST requests must contain an HTTP header field Content-Type: application/octet-stream
- For the full list of response codes, see Response status codes.
Malware presence
This query returns information about the malware status of the requested sample.
View OpenAPI SpecificationRequest
GET /api/databrowser/malware_presence/query/{hash_type}/{hash_value}
hash_type- Specifies the hash type that the request uses. Supported values:
md5,sha1,sha256 - Required
- Specifies the hash type that the request uses. Supported values:
hash_value- The hash of the file that you request data for. The value must be a valid hash of the type that the
hash_typeparameter specifies. - Required
- The hash of the file that you request data for. The value must be a valid hash of the type that the
Response
{
"rl": {
"malware_presence": {
"status": "KNOWN",
"query_hash": {
"sha1|md5|sha256": "hash_value"
}
}
}
}
status- Malware presence status designation (UNKNOWN, KNOWN, SUSPICIOUS, or MALICIOUS). KNOWN means the sample is classified as non-malicious (goodware). Read more about the ReversingLabs classification algorithm.
query_hash- The hash type and value used in the request. Can be
md5,sha1, orsha256
- The hash type and value used in the request. Can be
Malware presence bulk
A bulk query returns one response for multiple hashes. Each entry has the same format as the response of a single query. The response can also contain a field for the hashes that have an incorrect format. One request can contain a maximum of 100 hashes.
The service does not return the hashes that it cannot find in a separate field. It returns them in rl.entries with the status UNKNOWN, the same as all other requested hashes.
Request
POST /api/databrowser/malware_presence/bulk_query/{post_format}
post_format- Required parameter that defines the POST payload format. Supported options are xml and json. By default, the response format matches the format defined by this parameter.
- Required
The following rules apply to both formats (XML and JSON).
- hash_type value must be one of the following:
md5,sha1,sha256 - hash_value must be a valid hash of the same type specified by
hash_type
Request body
{
"rl": {
"query": {
"hash_type": "hash_type",
"hashes": [
"hash_value",
"hash_value",
"...",
"hash_value"
]
}
}
}
Response
{
"rl": {
"entries": [
{
"status": "UNKNOWN",
"query_hash": {
"sha1|md5|sha256": "hash_value"
}
}
],
"invalid_hashes": [
"hash_value"
]
}
}
entries- One entry per requested hash that the service accepted. Items in
rl.entriesare equivalent to therl.malware_presenceelement in the single query response. - With
extended=true, the entries don't all have the same shape. An entry for a classified sample carries the full extended field set, and an entry for an UNKNOWN hash carries onlystatusandquery_hash.
- One entry per requested hash that the service accepted. Items in
invalid_hashes- A list of the hashes in the request that have an incorrect format. This includes hashes with an incorrect length and hashes that contain characters that are not hexadecimal.
- The service omits this field when every hash in the request is well formed. It doesn't return an empty list, so read the field defensively.
Every hash you submit is returned in exactly one of rl.entries or rl.invalid_hashes, so the two lists together account for the whole request.
The service does not return the entries in the order of the hashes in your request. No order is guaranteed. Use query_hash to match each entry to the hash that you requested. If you match the entries by their position in the array, you get the results for the wrong hashes.
Extended malware presence
Single and bulk queries support the optional query parameter extended. This parameter controls if the response contains the extended classification data for a sample.
Set the parameter to true to get the extended data, or to false to get only the basic data. The default is false.
The extended data includes the trust factor, the threat level, the malware type, the family name, the platform, and the first seen and last seen times.
The response can also give the classification reason for a sample in the optional reason field. The service returns this field only when your request contains the extended parameter. The service calculates this field for some samples only.
The classification reason shows you why a sample has its status. This is most useful for goodware overrides. A goodware override is a whitelist technique that prevents false positives in software packages that have a high level of trust.
If a sample has a valid and trusted certificate, or if it comes from a trusted source, Spectra Intelligence whitelists the sample and all its extracted files. The antivirus results don't change this decision, so a sample with many antivirus detections can still have the KNOWN status. For more information, see Goodware overrides.
Single query with extended option
GET /api/databrowser/malware_presence/query/hash_type/hash_value?extended=true
Bulk query with extended option
POST /api/databrowser/malware_presence/bulk_query/post_format?extended=true
Response
The response format is the same for sample nodes in both single and bulk queries.
{
"rl": {
"malware_presence": {
"status": "MALICIOUS",
"query_hash": {
"sha1": "1b6bdd9c100b62514610cb6297ffcd1fd32a2c7c"
},
"first_seen": "2020-03-10T20:59:25",
"last_seen": "2026-09-08T15:22:59",
"reason": "antivirus",
"trust_factor": 5,
"threat_level": 3,
"scanner_count": 36,
"scanner_match": 25,
"scanner_percent": 69.44444274902344,
"threat_name": "Document-Office.Downloader.Powdow",
"classification": {
"is_generic": false,
"platform": "Document",
"subplatform": "Office",
"family_name": "Powdow",
"type": "Downloader"
}
}
}
}
Not every field appears in every response:
statusandquery_hashare always returned.classificationandthreat_nameare returned for samples classified as SUSPICIOUS or MALICIOUS.reasonis returned only if it is calculated for the sample.md5,sha1, andsha256are returned only with theshow_hashesparameter.
Field descriptions:
status- Malware presence status designation (UNKNOWN, KNOWN, SUSPICIOUS, or MALICIOUS). KNOWN means that the sample is non-malicious (goodware). A proprietary ReversingLabs algorithm calculates the status. The algorithm adapts and improves when new information about the file and the threat becomes available.
query_hash- The hash value that the request uses. It can be
md5,sha1, orsha256.
- The hash value that the request uses. It can be
reason- An optional field that gives the reason for the classification status of a sample. Spectra Intelligence doesn't calculate this field for all samples, so the response doesn't always contain it.
- The value is one of the following:
- Overrides. These are two different values. The first records the decision of a user, the second the decision of a ReversingLabs analyst.
user_sample_override- a user override classified the sample.analyst_sample_override- an analyst classified the sample manually after an analysis.
- Trusted source, certificate, or signature.
best_source- you can get the sample from a trusted source, or the service unpacked the sample from a file that comes from a trusted source.best_certificate- the sample or its container is signed with a valid and trusted certificate.TC_certificate- the sample is signed with a recognized whitelisted certificate.TC_signature- a Spectra Core whitelisted signature matched the sample.
- Detection.
antivirus- the ReversingLabs multi-scan algorithm classified the sample from the aggregated antivirus scan results.next_gen_av- the service classified the sample from the aggregated next-gen antivirus scan results.
- Legacy.
sandbox(deprecated) - the ReversingLabs Cloud Sandbox classified the sample. The service returns this value only for the samples that got this reason before the value became deprecated. For dynamic analysis, use Dynamic analysis submission (TCA-0207).
- The
next_gen_avreason does not mean that the traditional antivirus scanners found nothing. It means that the next-gen antivirus results decided the classification. The response can also contain detections from traditional scanners.
classification- An object that contains the malware classification of the sample. The ReversingLabs algorithm calculates it from the most recent analysis. The service returns this object for the samples with the SUSPICIOUS or MALICIOUS status. For its fields, see Classification object.
threat_name- The detected threat name of the requested sample. The service returns it for the samples with the SUSPICIOUS or MALICIOUS status.
- The service composes the name from the
classificationfields in this format:platform-subplatform.type.family_name. The subplatform and its hyphen are present only if the sample has a subplatform. For example,Document-Office.Downloader.Powdowhas a subplatform, butWin64.Malware.Heuristicdoes not. The ReversingLabs malware naming standard defines the parts of the name.
threat_level- The severity value of the requested sample, from 0 to 5. This value is applicable to the samples with the SUSPICIOUS or MALICIOUS status. For the samples with the KNOWN status, read
trust_factor. - For malicious samples, 1 is the lowest severity (such as adware) and 5 is the highest (such as trojans).
- Do not interpret 0 as the absence of a threat. On a suspicious sample, 0 means that the classification is provisional and that Spectra Intelligence needs more information about the sample. The risk score table shows how the threat level maps to the risk score for each classification.
- The severity value of the requested sample, from 0 to 5. This value is applicable to the samples with the SUSPICIOUS or MALICIOUS status. For the samples with the KNOWN status, read
trust_factor- The trust factor value of the sources of the sample, from 0 (most trusted) to 5 (least trusted). This value is applicable to the samples with the KNOWN status. For the samples with the SUSPICIOUS or MALICIOUS status, read
threat_level. - All values in the range occur. A value of 0 shows a domain or a certificate with a high level of trust. A value of 5 shows a source with a low level of trust and no whitelisted certificates.
- The trust factor value of the sources of the sample, from 0 (most trusted) to 5 (least trusted). This value is applicable to the samples with the KNOWN status. For the samples with the SUSPICIOUS or MALICIOUS status, read
scanner_count- The number of scanners in the last scan
scanner_match- The number of scanners that detected malware in the last scan
scanner_percent- The percent of scanners that detected malware in the last scan, as a floating-point number
first_seen- The date and time when the sample first came into the system, or when the sample first got a scan result. The timestamp uses the ISO 8601 format and has no UTC offset.
last_seen- The date and time of the last important change to the analysis data or the classification data of the sample. The timestamp uses the ISO 8601 format and has no UTC offset.
An extended response for a classified sample contains both threat_level and trust_factor, whatever its status. Read the value that agrees with the classification, as the field descriptions above show. A sample with the UNKNOWN status has neither field, because Spectra Intelligence holds no data to report. Threat level and trust factor explains how the two scales relate to the risk score.
The scanner_count, scanner_match, and scanner_percent fields describe the last scan. The response does not give the time of that scan. The last_seen field records the last important change to the data of the sample, which is a different thing. If you must know when the service measured these values, record the time of your query with them.
Classification object
{
"classification": {
"platform": "Document",
"subplatform": "Office",
"type": "Downloader",
"family_name": "Powdow",
"is_generic": false,
"cve": {
"is_candidate": false,
"number": "0001",
"year": "2024"
}
}
}
platform- The platform that the detected malware attacks. It is one of the platforms that the ReversingLabs malware naming standard defines.
subplatform- The subplatform that the detected malware attacks. It is one of the subplatforms that the ReversingLabs malware naming standard defines. The service omits this field if the platform of the sample has no subplatform.
type- The malware type. It is one of the types that the ReversingLabs malware naming standard defines.
family_name- The family name of the detected malware
is_generic- Some trusted third-party antivirus scanners give a threat name that their naming convention shows to be a generic detection or a heuristic detection. Such a detection means that the sample has characteristics similar to known malicious software, but that the scanner did not identify a specific threat. If the scanners detect the malware in this way, this field returns
true.
- Some trusted third-party antivirus scanners give a threat name that their naming convention shows to be a generic detection or a heuristic detection. Such a detection means that the sample has characteristics similar to known malicious software, but that the scanner did not identify a specific threat. If the scanners detect the malware in this way, this field returns
cve- Contains the Common Vulnerabilities and Exposures (CVE) data of the sample, if such data is applicable. It has these fields:
is_candidate- returnstrueif the sample is a CVE candidate, orfalseif the sample is an official CVE list entrynumber- the CVE numberyear- the CVE year
- Contains the Common Vulnerabilities and Exposures (CVE) data of the sample, if such data is applicable. It has these fields:
Response examples
Sample with malware presence status MALICIOUS
{
"rl": {
"malware_presence": {
"status": "MALICIOUS",
"scanner_count": 40,
"classification": {
"platform": "Win32",
"type": "Trojan",
"is_generic": false,
"family_name": "Nsis"
},
"scanner_percent": 82.5,
"scanner_match": 33,
"threat_name": "Win32.Trojan.Nsis",
"query_hash": {
"sha1": "1d412db0ac58dd8d8bfae8b18c7b355bd14dab2f"
},
"first_seen": "2012-07-12T00:05:00",
"threat_level": 5,
"trust_factor": 5,
"last_seen": "2017-08-09T11:40:00"
}
}
}
Sample with malware presence status SUSPICIOUS
{
"rl": {
"malware_presence": {
"status": "SUSPICIOUS",
"query_hash": {
"sha1": "67181c15b4e080d7c16ae93911c50d4db868e128"
},
"first_seen": "2026-09-09T09:37:49",
"last_seen": "2026-09-09T09:42:40",
"reason": "antivirus",
"trust_factor": 5,
"threat_level": 5,
"scanner_count": 38,
"scanner_match": 18,
"scanner_percent": 47.3684196472168,
"threat_name": "Win64.Trojan.Generic",
"classification": {
"is_generic": true,
"platform": "Win64",
"family_name": "Generic",
"type": "Trojan"
}
}
}
}
A suspicious sample has the classification and threat_name fields, the same as a malicious sample. In this response, is_generic is true and the family name is Generic. This is because the scanners identified the sample heuristically and not as a specific named threat. The platform has no subplatform, so the threat_name has none either.
Sample with malware presence status KNOWN, classified by a goodware override
In this response, 19 of 25 scanners detected malware, but the sample has the KNOWN status. The reason field gives the explanation: the sample is signed with a recognized whitelisted certificate. This certificate overrides the antivirus results. This is the goodware override that Extended malware presence describes.
{
"rl": {
"malware_presence": {
"status": "KNOWN",
"reason": "TC_certificate",
"scanner_count": 25,
"scanner_percent": 76.0,
"scanner_match": 19,
"query_hash": {
"sha1": "5ff74f670c8a68557bf36955d3e4e2353266d607"
},
"first_seen": "2016-06-30T01:17:42",
"threat_level": 0,
"trust_factor": 0,
"last_seen": "2019-10-17T10:03:23"
}
}
}
Sample with malware presence status KNOWN, classified by antivirus results
Not all KNOWN classifications are overrides. In this response, no scanner detected malware, so the antivirus reason records a clean multi-scan result and not a whitelist decision. The classification and threat_name fields are absent, as they are for all samples that are not malicious and not suspicious.
{
"rl": {
"malware_presence": {
"status": "KNOWN",
"query_hash": {
"sha1": "ff7ee4e538586794576f8650d27d60c3c8f8cec2"
},
"first_seen": "2026-04-03T11:45:00",
"last_seen": "2026-09-08T10:33:56",
"reason": "antivirus",
"trust_factor": 2,
"threat_level": 0,
"scanner_count": 36,
"scanner_match": 0,
"scanner_percent": 0.0
}
}
}
Sample with malware presence status UNKNOWN
{
"rl": {
"malware_presence": {
"status": "UNKNOWN",
"query_hash": {
"sha1": "e4e8c856c1524ff22b87b29d605ab8fdb1007298"
}
}
}
}
UNKNOWN means that Spectra Intelligence has no classification data for the hash. It does not mean that the file is safe. Do not use this status as a verdict when you decide to permit a file. To get a classification, upload the sample with the File upload (TCA-0202/0203) API. To find what other data exists for the hash, use File analysis (TCA-0104).
Malware presence with available hashes
Single and bulk queries support the optional show_hashes parameter. You can use it together with the extended parameter in the same request.
If you set show_hashes to true, the response gives the MD5, SHA1, and SHA256 hashes of the sample with the other malware presence data. The default is false.
Request
GET /api/databrowser/malware_presence/query/hash_type/hash_value?show_hashes=true
POST /api/databrowser/malware_presence/bulk_query/{post_format}?show_hashes=true
Response
The entries in rl.entries in the bulk query response are equivalent to the rl.malware_presence element in the single query response.
If you set both the extended and the show_hashes parameters to true, the response contains the extended malware presence data and the MD5, SHA1, and SHA256 hashes.
{
"rl": {
"malware_presence": {
"status": "KNOWN",
"query_hash": {
"sha1|md5|sha256": "hash_value"
},
"md5": "md5 hash_value",
"sha1": "sha1 hash_value",
"sha256": "sha256 hash_value"
}
}
}
md5, sha1, sha256- The respective hashes of the requested sample.
For status and query_hash, see the field descriptions in the extended response section.
Examples
Runnable requests with authentication, in curl and Python, are available in the OpenAPI reference for both the single and bulk operations.
Single query - changing the response format
/api/databrowser/malware_presence/query/sha1/a25b6db2d363eaa31de348399aedc5651280b52b?format=json
/api/databrowser/malware_presence/query/sha1/a25b6db2d363eaa31de348399aedc5651280b52b?format=xml
Single query - changing the hash type
/api/databrowser/malware_presence/query/sha1/a25b6db2d363eaa31de348399aedc5651280b52b
/api/databrowser/malware_presence/query/sha256/10dbb2b27208c5566d326b47950657bf6b3c9a59e302598a128ad7125d5fb4fd
/api/databrowser/malware_presence/query/md5/ca083f61113e1fb8f539ecfa7c725fc8
Single query - changing the optional flags
/api/databrowser/malware_presence/query/sha1/a25b6db2d363eaa31de348399aedc5651280b52b?extended=true
/api/databrowser/malware_presence/query/sha1/a25b6db2d363eaa31de348399aedc5651280b52b?show_hashes=true
/api/databrowser/malware_presence/query/sha1/a25b6db2d363eaa31de348399aedc5651280b52b?extended=true&show_hashes=true
Bulk query - changing the POST format
/api/databrowser/malware_presence/bulk_query/json
/api/databrowser/malware_presence/bulk_query/xml
For bulk queries, the response format is the same as the request format. To get a different response format, add the format query field:
/api/databrowser/malware_presence/bulk_query/xml?format=json
Bulk query - JSON POST format
/api/databrowser/malware_presence/bulk_query/json
{
"rl": {
"query": {
"hash_type": "md5",
"hashes": [
"4bb64c06b1a72539e6d3476891daf17b",
"6353de8f339b7dcc6b25356f5fbffa4e",
"59cb087c4c3d251474ded9e156964d5d",
"6c2eb9d1a094d362bcc7631f2551f5a4",
"a82c781ce0f43d06c28fe5fc8ebb1ca9",
"920f5ba4d08f251541c5419ea5fb3fb3"
]
}
}
}
{
"rl": {
"query": {
"hash_type": "sha1",
"hashes": [
"13e40f38427a55952359bfc5f52b5841ce1b46ba",
"831fc2b9075b0a490adf15d2c5452e01e6feaa17",
"42b05278a6f2ee006072af8830c103eab2ce045f"
]
}
}
}
{
"rl": {
"query": {
"hashes": [
"0001f757f6b9523707462066100aa543",
"000202ed4a0fb4c95e68824bc7777a78",
"00026f63fd5a2600b73a866d7ef08b6f"
],
"hash_type": "md5"
}
}
}
See also
- File analysis (TCA-0104) - the full static and dynamic analysis data for a hash, when the file reputation data is not sufficient
- Multi-AV scan records (TCA-0103) - the per-scanner detection detail behind the
scanner_*fields - File reputation override (TCA-0102) - how to set and list the overrides that can occur in the
reasonfield - File upload (TCA-0202/0203) - how to upload a sample when Spectra Intelligence has no record of its hash
- Reanalyze file (TCA-0205) - how to request a new antivirus scan when the results for a sample are old
- Classification - how the statuses, the threat level, the trust factor, and the risk score relate
- Analysis rescans - when Spectra Intelligence rescans samples automatically