List recent webhook deliveries
curl --request GET \
--url https://api.godiligent.ai/webhooks/{webhook_id}/events \
--header 'X-API-KEY: <api-key>'import requests
url = "https://api.godiligent.ai/webhooks/{webhook_id}/events"
headers = {"X-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>'}};
fetch('https://api.godiligent.ai/webhooks/{webhook_id}/events', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.godiligent.ai/webhooks/{webhook_id}/events",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.godiligent.ai/webhooks/{webhook_id}/events"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-KEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.godiligent.ai/webhooks/{webhook_id}/events")
.header("X-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.godiligent.ai/webhooks/{webhook_id}/events")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"webhook_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"event_type": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"status_code": 204,
"request": {
"headers": {},
"payload": {}
},
"response": {
"headers": {},
"body": {}
}
}
]Webhooks
List Deliveries
List recent webhook deliveries for a specific webhook.
GET
/
webhooks
/
{webhook_id}
/
events
List recent webhook deliveries
curl --request GET \
--url https://api.godiligent.ai/webhooks/{webhook_id}/events \
--header 'X-API-KEY: <api-key>'import requests
url = "https://api.godiligent.ai/webhooks/{webhook_id}/events"
headers = {"X-API-KEY": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-API-KEY': '<api-key>'}};
fetch('https://api.godiligent.ai/webhooks/{webhook_id}/events', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.godiligent.ai/webhooks/{webhook_id}/events",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"X-API-KEY: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.godiligent.ai/webhooks/{webhook_id}/events"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-API-KEY", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.godiligent.ai/webhooks/{webhook_id}/events")
.header("X-API-KEY", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.godiligent.ai/webhooks/{webhook_id}/events")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-API-KEY"] = '<api-key>'
response = http.request(request)
puts response.read_body[
{
"id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"webhook_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"event_type": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"status_code": 204,
"request": {
"headers": {},
"payload": {}
},
"response": {
"headers": {},
"body": {}
}
}
]Endpoint
GET /webhooks/{webhook_id}/events
Returns a list of recent webhook delivery attempts for the specified webhook. Results are sorted by most recent first.
Path Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| webhook_id | string | Yes | The ID of the webhook to list deliveries for. |
Response
Returns a JSON array of delivery objects. Each object contains:| Field | Type | Description |
|---|---|---|
| id | string | Unique identifier for the delivery event. |
| event_type | string | The type of event delivered. |
| timestamp | string | ISO timestamp of when the delivery occurred. |
| status_code | number | HTTP status code returned by the webhook endpoint. |
| request | object | The request payload sent to the webhook. |
| response | object | The response returned by the webhook endpoint. |
Example Responses
cdd_state_changed
{
"id": "54ef493d-7672-4cd8-8080-599601e9609d",
"event_type": "cdd_state_changed",
"timestamp": "2025-07-31T02:51:34.155Z",
"status_code": 500,
"request": {
"headers": {
"Content-Type": "application/json",
"User-Agent": "DiligentAI/1.0",
"X-Webhook-Id": "df89eb16-4c6a-439f-b668-7cca0cd786fa",
"X-Event-Id": "54ef493d-7672-4cd8-8080-599601e9609d",
"X-Customer-Id": "69df5d81-2b74-4f42-a401-13eb96ba0619",
"X-Target-type": "CDD",
"X-Event-Name": "CDD_COMPLETED",
"X-Signature": "sha256=..."
},
"payload": "<CDD object as JSON string>"
},
"response": {
"body": "..."
}
}
- payload: The full CDD object as a JSON string. See the CDD Object documentation for details.
- headers: All headers sent to your endpoint, including:
Content-Type: Alwaysapplication/jsonUser-Agent: Sender identifierX-Webhook-Id: Webhook unique IDX-Event-Id: Event unique IDX-Customer-Id: Authenticated customer IDX-Target-type: AlwaysCDDX-Event-Name: Specific CDD event (e.g.,CDD_COMPLETED)X-Signature: HMAC signature for authenticity
monitoring_alert_fired
{
"id": "f9e2b3a7-2b4c-4d7d-9a2f-7f7c6f7c6f7c",
"event_type": "monitoring_alert_fired",
"timestamp": "2025-07-31T05:12:03.123Z",
"status_code": 200,
"request": {
"headers": {
"Content-Type": "application/json",
"User-Agent": "DiligentAI/1.0",
"X-Webhook-Id": "df89eb16-4c6a-439f-b668-7cca0cd786fa",
"X-Event-Id": "f9e2b3a7-2b4c-4d7d-9a2f-7f7c6f7c6f7c",
"X-Customer-Id": "69df5d81-2b74-4f42-a401-13eb96ba0619",
"X-Target-type": "MONITORING_ALERT",
"X-Event-Name": "MONITORING_ALERT_FIRED",
"X-Signature": "sha256=..."
},
"payload": {
"alert_id": "alrt_01HZY9V7FZJQ3K0KZP1YQ9E5X2",
"monitoring_id": "mon_01HZY9V7FZJQ3K0KZP1YQ9E5X2",
"type": "FRAUD",
"details": {
"reason": "Suspicious activity detected",
"triggered_at": "2025-07-31T05:12:03.123Z"
}
}
},
"response": {
"body": "ok"
}
}
- payload: The alert object, with all relevant fields for the alert event.
- headers: Same structure as above, with
X-Target-typeasMONITORING_ALERTandX-Event-NameasMONITORING_ALERT_FIRED.
flow_run_completed
{
"id": "54ef493d-7672-4cd8-8080-599601e9609d",
"event_type": "flow_run_completed",
"timestamp": "2025-07-31T10:00:45.000Z",
"status_code": 200,
"request": {
"headers": {
"Content-Type": "application/json",
"User-Agent": "DiligentAI/1.0",
"X-Webhook-Id": "df89eb16-4c6a-439f-b668-7cca0cd786fa",
"X-Event-Id": "54ef493d-7672-4cd8-8080-599601e9609d",
"X-Customer-Id": "69df5d81-2b74-4f42-a401-13eb96ba0619",
"X-Target-type": "FLOW_RUN",
"X-Event-Name": "FLOW_RUN_COMPLETED",
"X-Signature": "sha256=..."
},
"payload": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"flow_id": "flow-abc123",
"flow_version_id": "ver-def456",
"status": "COMPLETED",
"input": { "subject": "Acme Corp" },
"report": "s3://flows-artifacts/reports/run-a1b2c3d4.json"
}
},
"response": {
"body": "ok"
}
}
- payload: The full flow run object (same as
GET /v1/flow-runs/{runId}). - headers: Same structure as above, with
X-Target-typeasFLOW_RUNandX-Event-NameasFLOW_RUN_COMPLETED.
flow_run_failed
{
"id": "f9e2b3a7-2b4c-4d7d-9a2f-7f7c6f7c6f7c",
"event_type": "flow_run_failed",
"timestamp": "2025-07-31T10:00:12.000Z",
"status_code": 200,
"request": {
"headers": {
"Content-Type": "application/json",
"User-Agent": "DiligentAI/1.0",
"X-Webhook-Id": "df89eb16-4c6a-439f-b668-7cca0cd786fa",
"X-Event-Id": "f9e2b3a7-2b4c-4d7d-9a2f-7f7c6f7c6f7c",
"X-Customer-Id": "69df5d81-2b74-4f42-a401-13eb96ba0619",
"X-Target-type": "FLOW_RUN",
"X-Event-Name": "FLOW_RUN_FAILED",
"X-Signature": "sha256=..."
},
"payload": {
"id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"flow_id": "flow-abc123",
"flow_version_id": "ver-def456",
"status": "FAILED",
"input": { "subject": "Acme Corp" },
"error": {
"code": "EXECUTION_ERROR",
"message": "entityName is required"
}
}
},
"response": {
"body": "ok"
}
}
- payload: The full flow run object (same as
GET /v1/flow-runs/{runId}). - headers: Same structure as above, with
X-Target-typeasFLOW_RUNandX-Event-NameasFLOW_RUN_FAILED.
Errors
500 Internal Server Error
Unexpected error occurred.{
"error": "Internal server error"
}
Authentication
This endpoint requires authentication. Only deliveries for webhooks owned by the authenticated customer are returned.Authorizations
Path Parameters
Webhook ID to filter deliveries.
⌘I