API Reference
OpenAPI 3.1 reference for ThreatRecall. Browse endpoints below or
download the full spec as /openapi.json.
Auth endpoints require a Bearer JWT token (24h expiry).
{
"status": "healthy"
}
{
"status": "ok",
"service": "threatrecall",
"version": "1.0.0"
}
| Parameter | Type | Description |
|---|---|---|
| query required | string | Natural language or keyword query. 1–300 chars. PII patterns rejected. |
{
"query": "APT29 Spear Phone"
}
{
"results": [
{
"id": "uuid",
"node_type": "actor",
"name": "APT29",
"description": "...",
"source": "stix:...",
"tlp": "TLP:GREEN",
"confidence": 0.85,
"properties": {},
"linked_evidence_ids": ["ev-uuid"]
}
],
"seeded": true,
"query": "APT29 Spear Phone",
"result_count": 1,
"latency_ms": 42
}
| Parameter | Type | Description |
|---|---|---|
| q required query | string | Search query, 1–300 chars |
| limit query | integer | Max results. Default 20, max 100. |
Authorization: Bearer <token>. Permission: recall:read. Results filtered to workspace TLP ceiling.
| Parameter | Type | Description |
|---|---|---|
| q required query | string | Search query |
| mode query | enum | blended (default) or structured |
| limit query | integer | Max results. Default 20, max 100. |
| include_rejected query | boolean | Include rejected nodes (admin/analyst only) |
{
"results": [...],
"count": 5,
"query": "APT29 spear phone",
"mode": "blended",
"include_rejected": false,
"recall_id": "uuid",
"max_tlp": "TLP:GREEN"
}
| Parameter | Type | Description |
|---|---|---|
| id required path | UUID | Recall session ID |
| Parameter | Type | Description |
|---|---|---|
| q required | string | Search query |
| limit | integer | Default 20, max 100 |
| include_rejected | boolean | Include rejected nodes |
red_export_grant=true. Without it, returns HTTP 403.
| Parameter | Type | Description |
|---|---|---|
| id required path | string | Recall session ID |
{
"type": "bundle",
"id": "bundle--...",
"spec_version": "2.1",
"objects": [
{
"type": "malware",
"spec_version": "2.1",
"id": "malware--...",
"created": "2024-01-15T00:00:00.000Z",
"modified": "2024-01-15T00:00:00.000Z",
"name": "CozyCar",
"confidence": 85,
"object_marking_refs": ["marking-definition--..."],
"external_references": [...]
}
]
}
recall:write and the direct_ingest feature. LLM preview, staging review, batch lifecycle, and graph traversal require knowledge_graph. TLP values are normalized to canonical TLP:* markings before write/display.
{
"bundle": {
"id": "bundle--4bd9e3a0-1234-5678-9abc-def012345678",
"type": "bundle",
"objects": [
{
"type": "malware",
"id": "malware--a3c2b1d0-...",
"name": "CozyCar",
"description": "APT29 custom malware",
"x_mitre_tlp": "GREEN",
"confidence": 85,
"created": "2024-01-15T00:00:00Z",
"external_references": [{"source_name": "ThreatRecall"}]
}
]
},
"default_tlp": "TLP:GREEN",
"default_confidence": 0.7
}
{
"success": true,
"results": {
"nodes_created": 1,
"evidence_created": 1,
"skipped": 7
}
}
{
"collector": "alienvault-otx",
"items": [
{
"title": "APT29 DNS tunneling indicator",
"description": "Malicious DNS resolution",
"url": "https://otx.alienvault.com/pulse/abc123",
"type": "ioc",
"tlp": "TLP:GREEN",
"tags": ["apt29", "dns"]
}
],
"default_tlp": "TLP:AMBER",
"default_confidence": 0.5
}
{
"event": {
"uuid": "abc123",
"date": "2024-03-15",
"Attribute": [
{
"uuid": "def456",
"type": "md5",
"value": "d41d8cd98f00b204e9800998ecf8427e",
"to_ids": true,
"category": "Payload delivery"
}
]
},
"default_tlp": "TLP:AMBER",
"default_confidence": 0.6
}
{
"nodes": [
{
"name": "OPNUM21",
"node_type": "actor",
"description": "Probing infrastructure observed Jan 2025",
"tlp": "TLP:AMBER",
"confidence": 0.75
}
],
"default_tlp": "TLP:GREEN",
"default_confidence": 0.8
}
knowledge_graph feature. Entities are staged for review; set ingest_mode=auto to commit immediately.{
"text": "APT29 used Cobalt Strike beacons with C2 at 198.51.100.42 delivered via macro-enabled Word documents.",
"ingest_mode": "review"
}
{
"success": true,
"batch_id": "batch-uuid",
"summary": {
"total_parsed": 3,
"total_to_add": 2,
"total_to_update": 0,
"duplicates": 0,
"missing_tlp": 1,
"sensitive_warns": 0
},
"entities": [
{
"id": "staged-uuid",
"status": "pending",
"node_type": "actor",
"name": "APT29",
"proposed_tlp": "TLP:AMBER",
"duplicate_candidates": [],
"warnings": [],
"extraction_reasoning": "..."
}
],
"auto_ingest": false
}
| Field | Type | Description |
|---|---|---|
| status required | enum | pending | accepted | rejected | merged | uncertain |
| resolved_tlp | string | Override proposed TLP |
| merge_target_id | UUID | Redirect entity to existing node (use with status=merged) |
{
"title": "APT29 Campaign Report Q1 2025",
"source_name": "internal-research",
"content_blocks": [
{
"entity_name": "APT29",
"node_type": "actor",
"description": "Russian state APT group",
"source_url": "https://internal/reports/apt29-q1",
"excerpt": "APT29 conducted spear phishing..."
}
],
"default_tlp": "TLP:GREEN",
"default_confidence": 0.6
}
Creates or updates a tenant-scoped STIX/TAXII feed source. Unknown redistribution terms fail closed.
Stages STIX 2.1 bundle, registered TAXII pull, or manual text input. Nothing is committed until the batch commit endpoint succeeds.
Atomically commits approved staged items into the tenant corpus with provenance and audit. Failed writes roll back the entire commit.
Removes objects created only by the batch and restores pre-existing merged objects from provenance snapshots.
Returns explicit absence when the tenant-owned or internally-derived lists contain no match.
Atomically promotes one pending candidate into an authoritative graph edge. Requires graph:write.
Receives signed vendor-neutral case dispositions. The signature covers method, path, endpoint id, event id, timestamp, tenant resolved from the endpoint, and raw-body digest.
Looks up one normalized IOC against committed tenant corpus records only. Query-time provider calls are not performed. Unknown indicators return known:false rather than an error.
Looks up up to 100 normalized IOCs against committed tenant corpus records only. Per-item failures are isolated in the response.
Returns the Spec 042 deterministic relationship graph payload for a visible pivot entity. The server resolves tenant, caller, feature gate, permission, and TLP clearance; unknown or above-clearance pivots return `known:false` without guessed alternatives.
Builds a STIX 2.1 bundle from the submitted Spec 042 payload only. The export does not re-query neighbors and does not add out-of-payload nodes or relationships.
Records a true-positive, false-positive, or unknown indicator sighting through the shared REST/MCP/SIRP contract and queues deterministic lifecycle score refresh.
Returns the deterministic lifecycle score, export eligibility, and recomputable explanation. Unknown or above-clearance indicators return known:false rather than guessed content.
Records first-class indicator retraction state. Retraction forces export and default-enrichment exclusion within one refresh cycle regardless of score.
Returns the tenant-scoped lifecycle export set snapshot. Unknown lifecycle state fails closed before STIX bundle construction.
audit:export (admin/audit role). Read requires audit:read.
| Parameter | Type | Description |
|---|---|---|
| from query | date-time | Start time (ISO 8601) |
| to query | date-time | End time (ISO 8601) |
| limit query | integer | Max records. Default 1000, max 5000. |
id,tenant_id,user_id,user_email,action,resource,resource_id,outcome,ip_address,metadata,created_at
"abc123","tenant-uuid","user-uuid","analyst@contoso.com","recall.search","recall","","success","192.168.1.1","{}","2024-01-15T12:00:00Z"
| Parameter | Type | Description |
|---|---|---|
| user_id query | UUID | Filter by user |
| from query | date-time | Start time |
| to query | date-time | End time |
| limit query | integer | Default 100 |
| offset query | integer | Default 0 |
| Field | Type | Description |
|---|---|---|
| name required | string | Full name (max 200 chars) |
| email required | string | Work email |
| org required | string | Organization (max 200 chars) |
| role required | enum | cti-analyst | soc-manager | threat-intel-lead | security-engineer | ciso | other |
| cti_stack | string | Current CTI stack (max 500 chars) |
{
"name": "Alex Chen",
"email": "alex.chen@contoso.com",
"org": "Contoso Security",
"role": "threat-intel-lead",
"cti_stack": "OpenCTI, Splunk, MISP"
}
{ "success": true }
Looking for the integration compatibility matrix?
View Integrations Matrix →