curl --request GET \
--url https://api.portalhq.io/api/v3/custodians/me/alerts/webhooks/{alertWebhookId}/delivery-events \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.portalhq.io/api/v3/custodians/me/alerts/webhooks/{alertWebhookId}/delivery-events"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.portalhq.io/api/v3/custodians/me/alerts/webhooks/{alertWebhookId}/delivery-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.portalhq.io/api/v3/custodians/me/alerts/webhooks/{alertWebhookId}/delivery-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 => [
"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://api.portalhq.io/api/v3/custodians/me/alerts/webhooks/{alertWebhookId}/delivery-events"
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://api.portalhq.io/api/v3/custodians/me/alerts/webhooks/{alertWebhookId}/delivery-events")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.portalhq.io/api/v3/custodians/me/alerts/webhooks/{alertWebhookId}/delivery-events")
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{
"results": [
{
"id": "cm5abc123def456ghi789jkl0",
"type": "EIP_155_TX_V1",
"event": {
"data": [
{
"transactionHash": "0x4978a4ba15a018532791ba4491e48b1aa8b544309c1ffce062bb1fb7e84dc069",
"chainId": "eip155:11155111"
}
],
"metadata": {
"deliveryEventId": "cm5abc123def456ghi789jkl0"
},
"type": "EIP_155_TX_V1"
},
"status": "DELIVERED",
"sentAt": "2025-01-20T10:30:00.000Z",
"attempts": 1,
"createdAt": "2025-01-20T10:29:58.000Z"
},
{
"id": "cm5xyz987wvu654tsr321qpo0",
"type": "EIP_155_TX_V1",
"event": {
"data": [
{
"transactionHash": "0x9b1c2d3e4f567890abcdef1234567890abcdef1234567890abcdef1234567890",
"chainId": "eip155:1"
}
],
"metadata": {
"deliveryEventId": "cm5xyz987wvu654tsr321qpo0"
},
"type": "EIP_155_TX_V1"
},
"status": "FAILED",
"sentAt": "2025-01-20T11:05:12.000Z",
"attempts": 10,
"createdAt": "2025-01-20T11:00:00.000Z"
}
],
"metadata": {
"alertWebhook": {
"id": "cm4voycw2001f68veade3tr0i",
"url": "https://example.com/alerts-webhooks/1/events"
},
"cursor": "cm5xyz987wvu654tsr321qpo0",
"take": 100,
"hasMore": true
}
}{
"error": "<string>"
}{
"error": "<string>"
}List alert webhook delivery events
Retrieve a cursor-paginated list of delivery events for an alert webhook,
including those that are pending, currently being replayed, delivered, or
failed. Use this endpoint to inspect delivery history and identify events
that need to be retried with
POST /custodians/me/alerts/webhooks/{alertWebhookId}/delivery-events/{deliveryEventId}/retries.
See Delivery event lifecycle
for the meaning of each status value and how manual retries interact with
the automatic retry loop.
curl --request GET \
--url https://api.portalhq.io/api/v3/custodians/me/alerts/webhooks/{alertWebhookId}/delivery-events \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.portalhq.io/api/v3/custodians/me/alerts/webhooks/{alertWebhookId}/delivery-events"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.portalhq.io/api/v3/custodians/me/alerts/webhooks/{alertWebhookId}/delivery-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.portalhq.io/api/v3/custodians/me/alerts/webhooks/{alertWebhookId}/delivery-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 => [
"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://api.portalhq.io/api/v3/custodians/me/alerts/webhooks/{alertWebhookId}/delivery-events"
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://api.portalhq.io/api/v3/custodians/me/alerts/webhooks/{alertWebhookId}/delivery-events")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.portalhq.io/api/v3/custodians/me/alerts/webhooks/{alertWebhookId}/delivery-events")
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{
"results": [
{
"id": "cm5abc123def456ghi789jkl0",
"type": "EIP_155_TX_V1",
"event": {
"data": [
{
"transactionHash": "0x4978a4ba15a018532791ba4491e48b1aa8b544309c1ffce062bb1fb7e84dc069",
"chainId": "eip155:11155111"
}
],
"metadata": {
"deliveryEventId": "cm5abc123def456ghi789jkl0"
},
"type": "EIP_155_TX_V1"
},
"status": "DELIVERED",
"sentAt": "2025-01-20T10:30:00.000Z",
"attempts": 1,
"createdAt": "2025-01-20T10:29:58.000Z"
},
{
"id": "cm5xyz987wvu654tsr321qpo0",
"type": "EIP_155_TX_V1",
"event": {
"data": [
{
"transactionHash": "0x9b1c2d3e4f567890abcdef1234567890abcdef1234567890abcdef1234567890",
"chainId": "eip155:1"
}
],
"metadata": {
"deliveryEventId": "cm5xyz987wvu654tsr321qpo0"
},
"type": "EIP_155_TX_V1"
},
"status": "FAILED",
"sentAt": "2025-01-20T11:05:12.000Z",
"attempts": 10,
"createdAt": "2025-01-20T11:00:00.000Z"
}
],
"metadata": {
"alertWebhook": {
"id": "cm4voycw2001f68veade3tr0i",
"url": "https://example.com/alerts-webhooks/1/events"
},
"cursor": "cm5xyz987wvu654tsr321qpo0",
"take": 100,
"hasMore": true
}
}{
"error": "<string>"
}{
"error": "<string>"
}Authorizations
Portal API Key (Custodian API Key). Pass as a Bearer token in the Authorization header.
Path Parameters
The unique identifier of the alert webhook.
Query Parameters
The number of delivery events to retrieve. Min 1, max 100. Default 100.
1 <= x <= 100The delivery event ID to use for cursor-based pagination. Pass the id of the last item from the previous response.
Comma-delimited list of delivery event statuses to filter by.
Valid values: PENDING, DELIVERED, FAILED, REPLAYING.
Comma-delimited list of alert webhook event types to filter by.
Valid values: EIP_155_TX_V1, PRE_SIGN_V1, SOLANA_TX_V1, SOLANA_TX_V2,
SOLANA_APPROVE_V1, SOLANA_APPROVE_V2, SOLANA_REVOKE_V1, SOLANA_REVOKE_V2,
SOLANA_DELEGATED_TRANSFER_V2, WALLET_EJECT_V1.
Field to order results by. Defaults to sentAt.
sentAt, createdAt Sort direction. Defaults to desc.
asc, desc Returns only delivery events created after this Unix timestamp (in seconds).
Returns only delivery events created before this Unix timestamp (in seconds).
Was this page helpful?