API Reference

Look up an IOC

Perform an exact-match lookup of a single IOC value (domain, IP address, URL, or file hash) across the IOC feed and blog-derived IOC references, returning enrichment data when the value is known.

This endpoint shares the /v1/ioc collection path with Search IOCs; the two are selected by the query parameter you supply. Pass value for an exact lookup, or q for a substring search.

GET
/v1/ioc

Cost: 1 credit per successful call

Query parameters

valuestringrequired

The exact IOC value to look up (domain, IP address, URL, or file hash). Accepted range: 1–255 characters. This endpoint performs exact matching only; for substring search across 1M+ IOCs use Search IOCs.

Request

curl "https://api.precursorintelligence.com/functions/v1/ioc?value=evil-azure-update.com" \
  -H "Authorization: Bearer $PRECURSOR_API_KEY"

Response

200 OK
{
  "data": {
    "value": "evil-azure-update.com",
    "iocs": [
      {
        "id": 4819023,
        "ioc_type": "domain",
        "threat_type": "botnet_cc",
        "malware": "cobalt_strike",
        "malware_printable": "Cobalt Strike",
        "confidence_level": 90,
        "first_seen_utc": "2026-05-16T11:00:00Z",
        "last_seen_utc": "2026-05-27T03:14:00Z",
        "is_compromised": false,
        "tags": ["c2", "cobalt-strike"],
        "reporter": "community"
      }
    ],
    "blog_iocs": [
      {
        "blog_guid": "3f2a1b4c-9e8d-4a2b-b1c3-7d6e5f4a3b2c",
        "ioc_type": "domain",
        "context": "C2 domain used in Cobalt Strike campaign targeting financial sector",
        "confidence": 85,
        "verified": true,
        "false_positive": false,
        "created_at": "2026-05-17T08:00:00Z"
      }
    ],
    "blog_enrichment": [
      {
        "source": "threat_report",
        "data": {
          "threat_actors": ["FIN7"],
          "report_url": "https://example.com/cobalt-strike-campaign"
        },
        "created_at": "2026-05-17T08:05:00Z"
      }
    ],
    "generated_at": "2026-05-29T10:24:31.118Z"
  },
  "meta": {
    "request_id": "8b16efb8-9a6c-4ace-b817-11cbee626d08",
    "generated_at": "2026-05-18T10:24:31.118Z",
    "credits": { "charged": 1, "remaining": 9998 }
  }
}

When the value is not found in any source, the call still succeeds and all three arrays are empty:

200 OK (not found)
{
  "data": {
    "value": "not-a-known-ioc.example.com",
    "iocs": [],
    "blog_iocs": [],
    "blog_enrichment": [],
    "generated_at": "2026-05-29T10:24:31.118Z"
  },
  "meta": {
    "request_id": "8b16efb8-9a6c-4ace-b817-11cbee626d08",
    "generated_at": "2026-05-18T10:24:31.118Z",
    "credits": { "charged": 1, "remaining": 9998 }
  }
}

Response fields

data.valuestringoptional

The IOC value that was looked up, echoed back from the request.

data.iocsarrayoptional

Matching entries from the IOC feed. Empty when the value is unknown. Each object contains id, ioc_type, threat_type, malware, malware_printable, confidence_level (integer), first_seen_utc, last_seen_utc, is_compromised (boolean), tags (string array), and reporter.

data.blog_iocsarrayoptional

Blog-derived IOC references. Empty when none exist. Each object contains blog_guid, ioc_type, context, confidence (integer), verified (boolean), false_positive (boolean), and created_at.

data.blog_enrichmentarrayoptional

Additional enrichment records derived from blog reporting. Each object contains source, a free-form data object (which may include threat_actors and report_url), and created_at.

data.generated_atstringoptional

ISO 8601 timestamp indicating when this response was generated.

Errors

StatuserrorWhen
400missing_queryNeither value nor q was supplied.
400invalid_valuevalue is empty or exceeds 255 characters.
401invalid_authorizationMissing or malformed Authorization header.
401unauthorizedInvalid/revoked key, or IP not allowlisted.
402insufficient_creditsOrganisation credit balance is below 1.
404not_foundThe route or entity does not exist.
405method_not_allowedOnly GET and OPTIONS are accepted.
500internalUnexpected server error (credit auto-refunded).

See Errors for the full error reference.