Integration patterns
Most production integrations use webhooks for new findings plus periodic API polling for hosts, raw events, and backfill.
Pull: REST API
Create a read-only or read & write API key from Settings → Account → API keys. Send it as a bearer token on every request:What to pull
List endpoints use cursor pagination — follow
next_cursor until it is null. Timestamps in query parameters are RFC 3339; times in response bodies are Unix nanoseconds unless noted.
API keys inherit the host and team scope of the user who created them. A key limited to specific teams only returns data for those hosts.
Push review decisions back
If your workflow triages inside the SIEM and you want the decision reflected in Hilt, use a read & write key and call the finding review endpoint documented in Findings.Push: webhooks
Register a webhook from Settings → Integrations → Webhooks (admin role required). Hilt delivers signedPOST requests to your receiver as events occur.
Subscribe to both
finding.created and detection_rule.matched to cover everything that appears in GET /v1/findings. Detection-rule matches are not delivered as finding.created.
Each delivery includes a JSON body with id, type, created_at, and a data object. Use data.finding_id with GET /v1/findings/{id} when you need the full finding object.
Verify signatures
Every delivery carriesX-Hilt-Event-Id, X-Hilt-Event-Type, X-Hilt-Timestamp, and X-Hilt-Signature. Recompute the HMAC-SHA256 over "<timestamp>.<raw body>" with your signing secret (whsec_...) and compare in constant time. See Webhooks — Verifying signatures for Python and JavaScript examples.
Reject replays by checking that the timestamp is recent, and deduplicate on X-Hilt-Event-Id — delivery is at-least-once.
Webhooks only receive events for hosts the registering user can see. A newly registered webhook does not replay historical findings.
End-to-end example
The Worked example walks through the full triage loop from a terminal: pull today’s critical findings, inspect one, and push a review decision back. The same steps map directly to a SOAR playbook. At a high level:- Webhook receives
finding.createdwithfinding_id - Playbook calls
GET /v1/findings/{id}for narrative and evidence - Playbook calls
GET /v1/eventswith host and time window for surrounding activity - Analyst or automation calls the review endpoint to accept or deny
Operational notes
- Rate and volume. Use cursor pagination and time-bounded
since/untilfilters. Poll findings on an interval that matches your SLA; use webhooks for latency-sensitive alerting. - Scope. Service accounts should use API keys created by a user with the fleet scope you need, or by a dedicated integration user limited to the right teams.
- Platform logs. Infrastructure and collector logs live in your cloud account and can be routed to your existing log pipeline independently. See Security operations — Logging.
- Dashboard webhooks UI. The in-product setup page at Webhooks links to the same API reference and delivery log.
Related
- API authentication and errors → Overview & Auth
- Webhook payloads and retries → Webhooks
- In-product webhook setup → Webhooks (Settings)
- Triage walkthrough → Worked example
