List deliveries
curl --request GET \
--url https://developer.encrata.com/api/webhooks/deliveries \
--header 'Authorization: Bearer <token>'import requests
url = "https://developer.encrata.com/api/webhooks/deliveries"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://developer.encrata.com/api/webhooks/deliveries', 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://developer.encrata.com/api/webhooks/deliveries",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://developer.encrata.com/api/webhooks/deliveries"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://developer.encrata.com/api/webhooks/deliveries")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://developer.encrata.com/api/webhooks/deliveries")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"result": [
{
"id": "<string>",
"webhook_id": "<string>",
"event_type": "<string>",
"payload": {},
"status": "<string>",
"attempts": 123,
"last_attempt_at": {},
"response_status": {},
"response_body": {},
"created_at": "<string>"
}
],
"message": "<string>"
}Webhooks
List deliveries
Inspect recent delivery attempts for one webhook.
GET
/
api
/
webhooks
/
deliveries
List deliveries
curl --request GET \
--url https://developer.encrata.com/api/webhooks/deliveries \
--header 'Authorization: Bearer <token>'import requests
url = "https://developer.encrata.com/api/webhooks/deliveries"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://developer.encrata.com/api/webhooks/deliveries', 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://developer.encrata.com/api/webhooks/deliveries",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://developer.encrata.com/api/webhooks/deliveries"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://developer.encrata.com/api/webhooks/deliveries")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://developer.encrata.com/api/webhooks/deliveries")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"success": true,
"result": [
{
"id": "<string>",
"webhook_id": "<string>",
"event_type": "<string>",
"payload": {},
"status": "<string>",
"attempts": 123,
"last_attempt_at": {},
"response_status": {},
"response_body": {},
"created_at": "<string>"
}
],
"message": "<string>"
}Returns the 50 most recent delivery attempts for a webhook, including your endpoint’s reply. This is the first place to look when a webhook is not arriving.
Any workspace role can read deliveries:
If your endpoint returns a
Authentication
Send your API key as a bearer token.Authorization: Bearer enc_xxxxxxxxxxxx
admin, tech, or readonly.
Request
string
required
The webhook to list deliveries for.
This endpoint is not paginated. It always returns at most 50 records, newest first. There is no
limit, page, or offset parameter.curl "https://developer.encrata.com/api/webhooks/deliveries?webhook_id=360cb300-d885-4c18-af2c-d259f936bb38" \
-H "Authorization: Bearer enc_xxxxxxxxxxxx"
import requests
response = requests.get(
"https://developer.encrata.com/api/webhooks/deliveries",
headers={"Authorization": "Bearer enc_xxxxxxxxxxxx"},
params={"webhook_id": "360cb300-d885-4c18-af2c-d259f936bb38"},
)
for delivery in response.json()["result"]:
print(delivery["event_type"], delivery["status"], delivery["attempts"])
const url = new URL("https://developer.encrata.com/api/webhooks/deliveries");
url.searchParams.set("webhook_id", "360cb300-d885-4c18-af2c-d259f936bb38");
const response = await fetch(url, {
headers: { Authorization: "Bearer enc_xxxxxxxxxxxx" },
});
const { result } = await response.json();
result.forEach((d) => console.log(d.event_type, d.status, d.attempts));
Response
boolean
true when the request succeeded.object[]
Delivery attempts, newest first. A webhook with no history returns
[].Hide delivery
Hide delivery
string
Delivery identifier (UUID).
string
The webhook this delivery belongs to.
string
The event that triggered the delivery, or
test for a test event.object
The exact JSON envelope that was sent. For a
generic webhook this is the body the signature was computed over.string
pending, retrying, delivered, or failed. See the table below.integer
How many attempts have been made, counting the first. Caps at 4.
string | null
ISO 8601 timestamp of the most recent attempt, or
null before the first attempt.integer | null
The HTTP status your endpoint returned, or
null when the request never completed.string | null
Your endpoint’s response body, sanitized and truncated, or
null when unavailable.string
ISO 8601 timestamp of when the delivery was queued.
string
A human-readable summary.
Example response
{
"success": true,
"result": [
{
"id": "8f2b1c90-4a7e-4d31-9b6f-2c5e81a40d77",
"webhook_id": "360cb300-d885-4c18-af2c-d259f936bb38",
"event_type": "lookup.completed",
"payload": {
"event": "lookup.completed",
"data": { "email": "satya@microsoft.com" },
"created_at": "2026-05-02T12:00:00Z"
},
"status": "delivered",
"attempts": 1,
"last_attempt_at": "2026-05-02T12:00:01Z",
"response_status": 200,
"response_body": "OK",
"created_at": "2026-05-02T12:00:00Z"
},
{
"id": "b41d7a62-9e05-4f88-a0c3-6d2f93b715ae",
"webhook_id": "360cb300-d885-4c18-af2c-d259f936bb38",
"event_type": "credits.low",
"payload": {
"event": "credits.low",
"data": { "credits_remaining": 500 },
"created_at": "2026-05-02T11:40:00Z"
},
"status": "retrying",
"attempts": 2,
"last_attempt_at": "2026-05-02T11:42:30Z",
"response_status": 503,
"response_body": "service unavailable",
"created_at": "2026-05-02T11:40:00Z"
}
],
"message": "Deliveries loaded."
}
Delivery statuses
| Status | Meaning |
|---|---|
pending | Queued, not yet attempted. |
retrying | An attempt failed and another is scheduled. |
delivered | Your endpoint returned a 2xx status. |
failed | Every attempt was used without a 2xx response. |
Retry schedule
Encrata allows a delivery 4 attempts in total and waits 10 seconds for each one.| Attempt | Delay before it runs |
|---|---|
| 1 | Immediate |
| 2 | 30 seconds |
| 3 | 2 minutes |
| 4 | 10 minutes |
Retry-After header with a longer delay, Encrata honours it, up to a maximum of 15 minutes. After the fourth attempt the delivery is marked failed and is not retried.
Errors
| Status | Code | When |
|---|---|---|
400 | bad_request | webhook_id was missing. |
401 | unauthorized | The API key is missing, revoked, or disabled. |
403 | forbidden | Your key resolves to no workspace membership. |
404 | not_found | No webhook with that ID exists in your workspace. |
500 | internal | Encrata could not load the delivery history. Retry. |
Example error
{
"success": false,
"result": { "code": "bad_request" },
"message": "A webhook id is required."
}
Next steps
Send a test event
Reproduce a failure on demand.
Verify signatures
A 401 from your own handler usually means a signature mismatch.
Update a webhook
Point the webhook at a working URL.
Error reference
Every status code the API returns.
Was this page helpful?