Documentation Index
Fetch the complete documentation index at: https://docs.shoal.xyz/llms.txt
Use this file to discover all available pages before exploring further.
Returns a webhook’s configuration and its 20 most recent delivery attempts. Use this to debug delivery issues or confirm events are arriving.
Webhook management is available only on plans that include webhook access.
Path Parameters
| Parameter | Type | Required | Description |
|---|
id | integer | Yes | Webhook ID |
Request
curl -X GET "https://api.shoal.xyz/v1/webhooks/12" \
-H "Authorization: Bearer YOUR_API_KEY"
import os, requests
API_KEY = os.environ.get("SHOAL_API_KEY", "YOUR_API_KEY")
r = requests.get(
"https://api.shoal.xyz/v1/webhooks/12",
headers={"Authorization": f"Bearer {API_KEY}"},
)
print(r.json())
const API_KEY = process.env.SHOAL_API_KEY || 'YOUR_API_KEY';
const res = await fetch('https://api.shoal.xyz/v1/webhooks/12', {
headers: { Authorization: `Bearer ${API_KEY}` },
});
console.log(await res.json());
Response (200)
{
"data": {
"id": 12,
"url": "https://example.com/shoal-webhook",
"secret_hint": "****f6a8",
"event_types": ["radar", "signal"],
"active": true,
"created_at": "2026-03-10T12:00:00Z",
"updated_at": "2026-03-10T12:00:00Z"
},
"recent_deliveries": [
{
"id": 456,
"event_type": "radar",
"event_id": 1234,
"status": "success",
"attempts": 1,
"response_status": 200,
"created_at": "2026-03-10T14:30:00Z",
"last_attempt_at": "2026-03-10T14:30:01Z"
},
{
"id": 455,
"event_type": "signal",
"event_id": 5678,
"status": "failed",
"attempts": 5,
"response_status": 500,
"created_at": "2026-03-10T13:00:00Z",
"last_attempt_at": "2026-03-10T15:00:00Z"
}
]
}
Delivery Statuses
| Status | Description |
|---|
pending | Queued or awaiting retry |
success | Delivered successfully (2xx response) |
failed | All retry attempts exhausted |
Errors
| Status | Error | Cause |
|---|
| 400 | Webhook id is required | Missing or invalid ID |
| 404 | Webhook not found | ID doesn’t exist or belongs to another account |