Skip to main content
GET
/
v1
/
webhooks
/
{id}
Get Webhook
curl --request GET \
  --url https://api.shoal.xyz/v1/webhooks/{id} \
  --header 'Authorization: Bearer <token>'
Returns a webhook’s configuration and its 20 most recent delivery attempts. Use this to debug delivery issues or confirm events are arriving.

Path Parameters

ParameterTypeRequiredDescription
idintegerYesWebhook ID

Request

cURL
curl -X GET "https://api.shoal.xyz/v1/webhooks/12" \
  -H "Authorization: Bearer YOUR_API_KEY"
Python
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())
JavaScript
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

StatusDescription
pendingQueued or awaiting retry
successDelivered successfully (2xx response)
failedAll retry attempts exhausted

Errors

StatusErrorCause
400Webhook id is requiredMissing or invalid ID
404Webhook not foundID doesn’t exist or belongs to another account