curl --request GET \
--url https://api.usenexio.com/api/v1/webhooks/{endpointID}/deliveries \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.usenexio.com/api/v1/webhooks/{endpointID}/deliveries"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.usenexio.com/api/v1/webhooks/{endpointID}/deliveries', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"deliveries": [
{
"id": "d1234567-abcd-4000-8000-000000000001",
"event_id": "c4a1e9d2-7b3f-5e60-8a14-2d9f6b0c3e71",
"endpoint_id": "550e8400-e29b-41d4-a716-446655440000",
"run_id": "f912ee92-af38-4a4a-a49c-43ac089cc301",
"event_type": "run.completed",
"webhook_version": "2026-03-22",
"target_url": "https://api.example.com/nexio/webhooks",
"status": "success",
"attempt_count": 1,
"max_attempts": 8,
"next_attempt_at": "2026-03-22T12:00:01Z",
"next_attempt_trigger": "automatic",
"created_at": "2026-03-22T12:00:01Z",
"completed_at": "2026-03-22T12:00:02Z",
"last_status_code": 200
}
]
}List webhook deliveries
List an endpoint’s deliveries with status, attempt count, and last result, filtered by status or event type.
curl --request GET \
--url https://api.usenexio.com/api/v1/webhooks/{endpointID}/deliveries \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.usenexio.com/api/v1/webhooks/{endpointID}/deliveries"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.usenexio.com/api/v1/webhooks/{endpointID}/deliveries', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"deliveries": [
{
"id": "d1234567-abcd-4000-8000-000000000001",
"event_id": "c4a1e9d2-7b3f-5e60-8a14-2d9f6b0c3e71",
"endpoint_id": "550e8400-e29b-41d4-a716-446655440000",
"run_id": "f912ee92-af38-4a4a-a49c-43ac089cc301",
"event_type": "run.completed",
"webhook_version": "2026-03-22",
"target_url": "https://api.example.com/nexio/webhooks",
"status": "success",
"attempt_count": 1,
"max_attempts": 8,
"next_attempt_at": "2026-03-22T12:00:01Z",
"next_attempt_trigger": "automatic",
"created_at": "2026-03-22T12:00:01Z",
"completed_at": "2026-03-22T12:00:02Z",
"last_status_code": 200
}
]
}Authorizations
Send the key as Authorization: Bearer <key>. Two kinds of key exist.
Organization keys are issued in the portal (Settings, then API keys),
each bound to one environment, shaped nx_<environment slug>_<64 hex>. They carry
no capabilities and pass every capability check, with one exception:
routes under /records, /actions, /operations,
/api/v1/engines/{id}/opportunities, /api/v1/graph and
/api/v1/catalog/documents accept an
organization key only when its environment is live, and refuse any
other with 403 scoped_key_required. Revocation takes effect within 60
seconds.
Scoped keys are issued by Nexio on request, shaped
nxsk_v1_<24 hex key id>_<43 character secret>. Each is bound to one
org, one environment, a set of engines and a set of capabilities. A
malformed, unknown or revoked nxsk_ key fails with 401 and is never
retried as an organization key. Revocation takes effect on the next
request. A scoped key without a route's capability gets 403
insufficient_capability; a scoped key not bound to the engine gets 403
engine_binding_forbidden.
Key-grantable capabilities: engines:read, runs:write, runs:read,
runs:defensibility:read, runs:test, catalog:read,
catalog:documents:read, webhooks:manage, conversations:use,
conversations:export, records:read, records:opportunities:run,
actions:write, actions:read, graph:read, records:analyze.
Routes that accept organization keys only (every scoped key gets 403
insufficient_capability): environment management, engine create,
update, configuration and publish, and conversation instance
authoring. Each operation description names the capability a scoped
key needs.
Path Parameters
Webhook endpoint UUID.
Query Parameters
Filter deliveries by status.
pending, in_progress, success, dead_letter, cancelled Filter deliveries by event type.
run.completed, run.failed, run.cancelled, run.superseded The next_cursor value from the previous page.
Response
List of deliveries.
Hide child attributes
Hide child attributes
Delivery identifier.
Deterministic event identifier.
Target endpoint identifier.
Associated run identifier.
Event type.
run.completed, run.failed, run.cancelled, run.superseded Payload version.
Snapshot of the endpoint URL at delivery creation time.
Current delivery status.
pending, in_progress, success, dead_letter, cancelled Number of delivery attempts made.
Attempt limit for the current generation, from the delivery's retry policy (8 on standard-v3). A permanent failure dead-letters the delivery at that attempt without using the rest. On standard-v3 and standard-v2 a permanent failure is any status other than 2xx, 408, 425, 429 and 500 to 599; on legacy-v1 it is any status other than 2xx, 429 and 500 or above.
Scheduled time for the next retry.
manual_resend from a resend until an attempt in that generation schedules a retry; automatic otherwise.
automatic, manual_resend When the delivery was created.
Timestamp of the most recent attempt.
HTTP status code from the most recent attempt.
Error message from the most recent failed attempt.
When the delivery reached a terminal state.
Pagination cursor. Omitted when there is no next page.