Webhook Endpoints
Subscribe to events and receive real-time HTTP notifications when things happen in your organization.
Webhook endpoints let you receive HTTP callbacks when events occur in your organization -- for example, when a ticket is created or a status changes. You register a URL, choose which events to subscribe to, and Spedy sends a signed POST request to your URL whenever a matching event fires.
Webhook endpoints require a Pro plan subscription.
Supported Events
GET /api/v1/webhook-endpoints/eventsReturns the list of event types you can subscribe to.
Available Events
| Event | Description |
|---|---|
ticket.created | A ticket was created |
ticket.updated | A ticket was updated |
ticket.deleted | A ticket was deleted |
ticket.status_changed | A ticket's status changed |
ticket.assigned | A ticket was assigned or reassigned |
ticket.comment_added | A comment was added to a ticket |
board.created | A board was created |
board.updated | A board was updated |
List Webhook Endpoints
GET /api/v1/webhook-endpointsPermission required: webhooks:view
Returns all webhook endpoints configured for your organization.
Example Response
[
{
"id": "wh_abc123",
"name": "CI/CD Pipeline",
"url": "https://ci.example.com/hooks/spedy",
"events": ["ticket.status_changed", "ticket.created"],
"isActive": true,
"createdAt": "2025-06-01T10:00:00Z",
"updatedAt": "2025-06-01T10:00:00Z"
}
]Create Webhook Endpoint
POST /api/v1/webhook-endpointsPermission required: webhooks:manage
Creates a new webhook endpoint. The response includes a secret field -- store this securely, as it is only returned once. Use the secret to verify the signature of incoming payloads.
Request Body
| Field | Type | Required | Description |
|---|---|---|---|
| name | string | Yes | Display name (max 100 characters) |
| url | string | Yes | The HTTPS URL to receive webhook payloads |
| events | string[] | Yes | Array of event types to subscribe to |
Example Request
{
"name": "CI/CD Pipeline",
"url": "https://ci.example.com/hooks/spedy",
"events": ["ticket.created", "ticket.status_changed"]
}Example Response
{
"id": "wh_abc123",
"name": "CI/CD Pipeline",
"url": "https://ci.example.com/hooks/spedy",
"events": ["ticket.created", "ticket.status_changed"],
"isActive": true,
"secret": "whsec_a1b2c3d4e5...",
"createdAt": "2025-06-01T10:00:00Z",
"updatedAt": "2025-06-01T10:00:00Z"
}Get Webhook Endpoint
GET /api/v1/webhook-endpoints/{id}Permission required: webhooks:view
Returns details for a specific webhook endpoint.
Update Webhook Endpoint
PATCH /api/v1/webhook-endpoints/{id}Permission required: webhooks:manage
Updates the name, URL, or subscribed events of a webhook endpoint.
Delete Webhook Endpoint
DELETE /api/v1/webhook-endpoints/{id}Permission required: webhooks:manage
Returns 204 No Content.
Ping Webhook Endpoint
POST /api/v1/webhook-endpoints/{id}/pingPermission required: webhooks:manage
Sends a test ping to the webhook URL to verify connectivity. Returns 204 No Content.
List Deliveries
GET /api/v1/webhook-endpoints/{id}/deliveriesPermission required: webhooks:view
Returns recent delivery attempts for a webhook endpoint.
Query Parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| limit | number | No | Number of deliveries to return (default: 50, max: 200) |
Example Response
[
{
"id": "dlv_xyz789",
"endpointId": "wh_abc123",
"eventType": "ticket.created",
"statusCode": 200,
"success": true,
"attempt": 1,
"error": null,
"createdAt": "2025-06-15T14:30:00Z"
}
]Redeliver
POST /api/v1/webhook-endpoints/{id}/deliveries/{deliveryId}/redeliverPermission required: webhooks:manage
Re-sends a previous webhook delivery. Returns 204 No Content.