Developers
Two SDKs, one contract.
Official clients for TypeScript and Python. Both wrap the same typed REST API, and both return the evidence chain alongside the verdict.
@omni-intel/sdk-js
v0.2.0npmTypeScript / JavaScript
$ npm install @omni-intel/sdk-js
import { OmniIntel } from "@omni-intel/sdk-js";
const omni = new OmniIntel({ apiKey: process.env.OMNI_INTEL_KEY! });
const result = await omni.enrich("http://evil.example/payload.exe");
console.log(result.verdict); // "malicious"
console.log(result.confidence); // 0.92
console.log(result.evidence[0].source); // "abusech/urlhaus"omni-intel
v0.2.0PyPIPython 3.9+
$ pip install omni-intel
from omni_intel import OmniIntel
omni = OmniIntel(api_key=os.environ["OMNI_INTEL_KEY"])
result = omni.enrich("http://evil.example/payload.exe")
print(result.verdict) # "malicious"
print(result.confidence) # 0.92
print(result.evidence[0].source) # "abusech/urlhaus"One contract, two clients
What both give you
Typed end to end
Request and response shapes are generated from the same specs that drive the API, so a breaking change surfaces at compile time rather than in production.
Evidence included
Every enrichment carries its evidence chain and retriever trace — the SDKs expose them as first-class fields, not an opaque blob.
One Bearer key
Same scoped, revocable key as the REST API. Keys are tenant-scoped and rate-limited per plan.
STIX 2.1 shapes
Indicator objects follow STIX 2.1 so results drop into a SOAR or TAXII consumer without translation.