Base path:
https://api.usenexio.com/api/v1/webhooksGET /api/v1/jobs/{run_id} is still the canonical reconciliation read.
Supported Events
evaluation.completedevaluation.failed
Manage Endpoints
Create endpoint
POST/api/v1/webhooks
List endpoints
GET/api/v1/webhooks
Returns endpoint metadata for the authenticated org_id + environment. Secrets are never returned
on list responses.
Update endpoint
PATCH/api/v1/webhooks/{endpoint_id}
Allowed fields:
urleventsdescriptionactive
active to false cancels pending deliveries for that endpoint. Updating url affects
only future deliveries because each delivery snapshots its own target_url.
Rotate secret
POST/api/v1/webhooks/{endpoint_id}/rotate-secret
Returns a new secret once and keeps the previous secret valid for 24 hours so your consumer can
cut over safely.
Delete endpoint
DELETE/api/v1/webhooks/{endpoint_id}
Deactivates the endpoint and cancels its pending deliveries. Historical delivery rows are retained
for audit and troubleshooting.
Delivery Contract
Delivery semantics:- at least once
- ordering not guaranteed
- same
X-Nexio-Deliveryvalue across retries for the same endpoint delivery - immutable JSON payload snapshot per delivery
Headers
| Header | Value |
|---|---|
Content-Type | application/json |
User-Agent | Nexio-Webhooks/1.0 |
X-Nexio-Event | evaluation.completed or evaluation.failed |
X-Nexio-Delivery | Stable delivery UUID |
X-Nexio-Timestamp | Unix timestamp used in signing |
X-Nexio-Webhook-Version | Current payload version, for example 2026-03-22 |
X-Nexio-Signature | t=<unix>,v1=<hex> or multiple v1= values during secret overlap |
Verification
Required consumer behavior:- Capture the raw request body.
- Build the signed payload as
<timestamp>.<raw_body>. - Compute HMAC-SHA256 with your webhook secret.
- Compare against every
v1=signature inX-Nexio-Signatureusing constant-time comparison. - Reject timestamps older than 5 minutes.
- Deduplicate on
X-Nexio-Delivery.
2xx quickly and process downstream work asynchronously. If you miss a delivery, receive
events out of order, or want the latest canonical read, call GET /api/v1/jobs/{run_id}.