Troubleshooting
This guide covers common issues with Spectra Intelligence APIs and feeds and the steps to resolve them.
401 Unauthorized response
Symptom
Every API request returns:
HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="Spectra Intelligence"
Cause
- The
Authorizationheader is missing from the request. - The credentials in the
Authorizationheader are incorrect. - The credential string is not correctly base64-encoded for HTTP Basic authentication.
- The account has been suspended or deactivated.
Solution
- Confirm that every request includes the
Authorizationheader using HTTP Basic authentication. All Spectra Intelligence APIs require this header, as described in Sending requests.
curl -u "<username>:<password>" \
"https://data.reversinglabs.com/api/databrowser/malware_presence/query/sha1/<hash>?format=json"
- Verify your credentials by logging in to the ReversingLabs portal. If your password has changed recently, regenerate or update it in all scripts and integrations.
- If using the ReversingLabs Python SDK, check that the
usernameandpasswordparameters passed to the client constructor are correct:
from ReversingLabs.SDK.ticloud import FileReputation
client = FileReputation(
host="https://data.reversinglabs.com",
username="<username>",
password="<password>"
)
- If credentials are correct but requests still return 401, contact support@reversinglabs.com to verify that your account is active.
403 Forbidden response
Symptom
API requests return:
HTTP/1.1 403 Forbidden
The response body may not include a descriptive message.
Cause
- Your account does not have a subscription or entitlement for the specific API endpoint you are calling.
- You are attempting to access a service that requires an upgrade to your current contract.
Solution
- Review the API reference page for the endpoint you are calling. Each service documents the required entitlement tier.
- Check which APIs are included in your contract by contacting support@reversinglabs.com or your ReversingLabs account manager.
- If you believe your account should have access, confirm that you are using the correct username (including the company segment, for example
u/company/username) — accessing APIs with an account from a different company segment may result in 403 responses.
404 Not Found — hash not in database
Symptom
A hash lookup returns:
HTTP/1.1 404 Not Found
Cause
- The queried hash has not yet been seen by the ReversingLabs database.
- The hash value is malformed or contains an encoding error.
- You are querying a hash type (for example, MD5) for an endpoint that expects a different hash type (for example, SHA-1).
Solution
- A 404 response for a hash query is not an error — it means the file has not been seen by Spectra Intelligence. This is a normal response for previously unseen files. According to the response status codes, 404 means no matching record was found.
- Verify that the hash string is correctly formatted and uses the expected algorithm. For example, SHA-1 is 40 hex characters:
# Compute SHA-1 of a local file to cross-check
sha1sum /path/to/file
- If you are certain the file has been analyzed before, check whether you are querying the correct API endpoint. Some endpoints accept only specific hash types; see the relevant API reference (for example, File Threat Intelligence).
429 Too Many Requests — quota exceeded
Symptom
API requests return:
HTTP/1.1 429 Too Many Requests
You may also receive an automated alert email from ReversingLabs.
Cause
- Your account's daily or monthly quota has been exhausted.
- Your request rate has exceeded the per-second rate limit for the API, which returns an additional
"Rate limit exceeded"message.
Solution
- Check whether this is a quota exhaustion or a rate limit issue. A rate-limit response includes an additional message:
{"message": "Rate limit exceeded"}
Quota exhaustion responses typically do not include a body beyond the 429 status.
- For rate limiting: implement exponential backoff and retry logic in your client. Spread bulk lookups across time rather than submitting all requests simultaneously.
- For quota exhaustion: daily quotas reset at 00:00 UTC and monthly quotas reset on the first of the month at 00:00 UTC, as described in Limits and quotas.
- Monitor your quota consumption proactively using the Customer Usage API before reaching the limit.
- If your quota is regularly insufficient for your use case, contact your ReversingLabs account manager to discuss an upgrade.
- For bulk operations, prefer the bulk query endpoints where available. Bulk queries count only successful items against your quota, as explained in Limits and quotas.
Request timeout on large queries
Symptom
Large bulk requests or queries with many items fail with a client-side timeout or return:
HTTP/1.1 503 Service Unavailable
after an extended wait.
Cause
- The client HTTP timeout is shorter than the time required to process a large bulk request.
- A network intermediary (proxy, load balancer) is enforcing a shorter timeout than the API requires.
- The request contains close to or more than the maximum allowed number of items (100 hashes per bulk request).
Solution
- Check the response status codes table. A 503 indicates a temporary overload on the server side; retry the request after a short delay.
- Ensure your bulk requests do not exceed 100 items. Requests exceeding this limit return HTTP 413. Split large datasets into batches of 100 or fewer:
def batch(items, size=100):
for i in range(0, len(items), size):
yield items[i:i + size]
for chunk in batch(all_hashes):
response = client.get_bulk_results(chunk)
- Increase the HTTP client timeout in your code. For the Python SDK, pass a
timeoutparameter:
response = client.file_reputation(hash_input=sha1, timeout=60)
- If timeouts are caused by a proxy, configure the proxy to allow longer-lived connections to
data.reversinglabs.com.
SSL/TLS certificate error
Symptom
Requests to the Spectra Intelligence API fail with an error such as:
curl: (60) SSL certificate problem: unable to get local issuer certificate
or in Python:
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed
Cause
- The system's CA certificate bundle does not include the root CA that signed the ReversingLabs server certificate.
- A network security appliance (TLS inspection proxy) is presenting its own certificate instead of the ReversingLabs certificate, and it is not trusted by the client.
- The system clock is significantly wrong, causing certificate validity checks to fail.
Solution
- Verify the server certificate from the command line:
curl -vI https://data.reversinglabs.com 2>&1 | grep -E "subject|issuer|expire"
- Update the CA certificate bundle on your system:
# Debian/Ubuntu
sudo apt-get update && sudo apt-get install --reinstall ca-certificates
# RHEL/CentOS
sudo yum reinstall ca-certificates
- If a TLS inspection proxy is in use, add the proxy's root CA certificate to your system trust store or pass it explicitly:
curl --cacert /path/to/proxy-ca.pem \
-u "<username>:<password>" \
"https://data.reversinglabs.com/..."
- Verify that the system clock is accurate:
date
timedatectl status
Significant clock skew causes certificate validation to fail even with a valid certificate.
- Do not use
--insecure(-kin curl) orverify=Falsein Python in production environments, as this disables certificate validation entirely and exposes your traffic to interception.
Python SDK connection error
Symptom
Using the ReversingLabs Python SDK, requests raise exceptions such as:
requests.exceptions.ConnectionError: HTTPSConnectionPool(host='data.reversinglabs.com', port=443): Max retries exceeded
or:
requests.exceptions.ConnectTimeout
Cause
- The machine running the SDK cannot reach
data.reversinglabs.comover HTTPS (port 443). - A proxy is required but not configured in the SDK or the environment.
- DNS resolution for
data.reversinglabs.comis failing.
Solution
- Test basic connectivity from the machine:
curl -I https://data.reversinglabs.com
If this fails, the issue is network-level, not SDK-related.
- Check DNS resolution:
nslookup data.reversinglabs.com
dig data.reversinglabs.com
- If a proxy is required, configure it via environment variables before running the SDK:
export HTTPS_PROXY="http://proxy.company.internal:8080"
Or pass proxy settings directly to the SDK client using the underlying requests.Session:
import requests
from ReversingLabs.SDK.ticloud import FileReputation
session = requests.Session()
session.proxies = {"https": "http://proxy.company.internal:8080"}
client = FileReputation(
host="https://data.reversinglabs.com",
username="<username>",
password="<password>",
proxies={"https": "http://proxy.company.internal:8080"}
)
- Verify that the SDK version is up to date:
pip install --upgrade reversinglabs-sdk-py3.
Batch request returns partial results
Symptom
A bulk API request containing multiple hashes returns fewer results than the number of items submitted. Some hashes are missing from the response.
Cause
- Hashes that are not found in the database (404) are omitted from bulk response bodies rather than returned as error entries — only valid, found results are included.
- Some items in the request were invalid (malformed hashes) and were silently skipped.
- The request contained more than 100 items, causing it to be rejected (HTTP 413) or truncated.
Solution
- Cross-reference the hashes in your request against the hashes in the response. Any hash absent from the response was either not found (not yet seen by Spectra Intelligence) or was invalid.
- Validate hash formats before submission. SHA-1 hashes must be exactly 40 lowercase hex characters. Malformed entries are skipped and not counted against quota.
- Note that the quota deduction model for bulk requests counts only valid returned results — invalid items are not charged. Confirming this behavior can help you detect malformed input.
- Keep batch sizes at or below 100 items to avoid HTTP 413 responses.
TAXII feed returns no data
Symptom
Polling the TAXII feed returns an empty collection or no STIX objects, even though new threat intelligence is expected.
Cause
- The
added_aftertimestamp used in the collection request is set to a future time, or is more recent than the latest available data. - The TAXII client is not sending the correct collection ID.
- The account does not have entitlement for the TAXII feed.
- The collection has not yet published new data within the polled time window.
Solution
- Check the
added_afterparameter in your TAXII request. Set it to a known past timestamp to verify that objects are returned:
# Example: request objects from the past 24 hours
added_after=$(date -u -d '24 hours ago' +"%Y-%m-%dT%H:%M:%SZ")
- Confirm you are using the correct TAXII collection ID. Refer to the TAXII feed documentation for available collection IDs and their content.
- Verify your TAXII client is authenticating correctly with Basic auth credentials.
- Test the feed endpoint directly with
curlto isolate whether the issue is with the client or the server:
curl -u "<username>:<password>" \
"https://data.reversinglabs.com/api/taxii/flexible-intel-feeds/collections/<collection-id>/objects/?added_after=2024-01-01T00:00:00Z"
- If you receive a 403 response, confirm with your account manager that the TAXII feed is included in your contract.
Unexpected UNKNOWN classification
Symptom
A hash lookup or file analysis returns a classification of UNKNOWN rather than malicious, suspicious, or goodware.
Cause
- The file has not been seen by the ReversingLabs network before, so no classification exists yet.
- The file is a novel or rare variant that has not been analyzed by enough sources to produce a confident verdict.
- The hash is for a container file whose classification depends on extracted children, and those children have not been analyzed.
Solution
- An
UNKNOWNresult is not an error — it means the file has no established reputation in the Spectra Intelligence database. This is expected for newly discovered or very rare files. - To obtain a classification for an unknown file, submit it for analysis on a Spectra Analyze appliance. Spectra Analyze uses Spectra Core to perform deep static analysis and can produce a local classification.
- Review the classification methodology to understand how classifications are assigned and what factors contribute to a confident verdict.
- If you are seeing a high volume of
UNKNOWNresults for files that you believe are malicious, they may be custom or targeted malware. Submit samples through your ReversingLabs support channel for analyst review.