Both modes return the same artifact payload. You choose the mode per task with the
completion_delivery parameter when you create the task. When you omit it, no completion handoff runs and results stay in Neo.
This capability is aimed at teams integrating Neo into external systems. It is configured through the API and team settings.
What’s in the completion artifact
The completion artifact is a single structured snapshot of a finished task — everything a downstream system needs to act on the result without scraping the transcript. At a high level it captures:- Outcome — the final task status and when the task completed.
- Summary — a human-readable description of what Neo did and what it concluded.
- Findings — the validated security issues Neo produced, plus a count.
- References — identifiers that tie the artifact back to the originating task and its output stream.
Choosing a delivery mode
- Use a webhook when you want results pushed downstream automatically — opening tickets, posting to a queue, or triggering the next step in a pipeline without polling.
- Use artifact (pull) when your system would rather fetch results on its own schedule, or when you cannot expose an inbound endpoint for Neo to call.
Push results to a webhook
1. Configure your team webhook
The webhook target is a team-level setting, so every webhook-mode task in the team is delivered to the same URL. Updating it requires a team admin. Set the webhook URL withPATCH /api/v1/teams:
2. Trigger a task with webhook delivery
Setcompletion_delivery to webhook when you create the task:
Webhook request
Neo sends aPOST with a JSON body and these headers:
The body is the completion artifact, with an additional
event field on webhook deliveries:
Pull results via the API
If you would rather fetch results yourself, create the task withcompletion_delivery set to artifact:
?refresh=true to rebuild the artifact from the task’s current issues if findings were updated after completion:
Delivery and security guarantees
- Best-effort delivery. Webhook delivery does not block or fail the task. If your endpoint is unreachable or returns a non-2xx status, the task still completes normally — so for guaranteed durability, treat the persisted artifact (
GET /api/v1/tasks/{id}/artifacts) as the source of truth. - Timeout. Neo waits up to 15 seconds for your endpoint to respond. Acknowledge quickly with a 2xx and process the payload asynchronously.
- HTTPS only. Webhook URLs must use
httporhttps. Use HTTPS in production. - SSRF protection. Neo will not call private or internal targets. URLs resolving to
localhost, link-local, RFC 1918 private ranges, or cloud metadata endpoints are blocked.

