API reference
Webhooks
Customer-owned HTTPS receivers for task.*, import.* and export.* events. Deliveries are signed, retried on a backoff for six hours, and identified by a stable event id.
The Webhook object
Attributes
idstringCrockford-base32 ULID (26 chars).urlstring (URL)eventsarray of enumsstatusenumactivepauseddisabled
descriptionstring, nullablelast_delivery_attimestamp, nullableRFC 3339 / ISO 8601 timestamp.created_attimestampRFC 3339 / ISO 8601 timestamp.
The Webhook object
{
"id": "01HX5K2MZ7A3Q4FBNDC0EVDXYW",
"url": "https://example.com/…",
"events": [
"task.succeeded"
],
"status": "active",
"description": "A short description.",
"last_delivery_at": "2026-04-27T14:32:00Z",
"created_at": "2026-04-27T14:32:00Z"
}Create a webhook
POST/v1/webhooks
The signing_secret in the response is shown ONCE and never returned again. Verify each delivery with HMAC-SHA256(signing_secret, "{timestamp}.{raw_body}") and constant-time-compare to the v1 value in the Veeton-Signature header.
Parameters
urlstring (URL)requiredPublichttps://endpoint on the default port, without embedded credentials.eventsarray of enumsrequireddescriptionstringoptional
Returns
Returns a WebhookCreateResponse object with status 201.
Errors
400Invalid request (URL policy, unknown event, empty events)
500Server error
POST/v1/webhooks
curl https://api.veeton.com/v1/webhooks \
-H "Authorization: Bearer $VEETON_KEY" \
-H "Content-Type: application/json" \
-d '{
"url": "https://api.example.com/veeton/webhook",
"events": [
"task.succeeded"
],
"description": "A short description."
}'Response · 201
{
"id": "01HX5K2MZ7A3Q4FBNDC0EVDXYW",
"url": "https://example.com/…",
"events": [
"task.succeeded"
],
"status": "active",
"description": "A short description.",
"last_delivery_at": "2026-04-27T14:32:00Z",
"created_at": "2026-04-27T14:32:00Z",
"signing_secret": "whsec_2c7f9b41...e1"
}List webhooks
GET/v1/webhooks
Parameters
limitinteger· queryoptionalcursorstring· queryoptional
Returns
Returns a WebhookList object with status 200.
Errors
400Invalid request
500Server error
GET/v1/webhooks
curl https://api.veeton.com/v1/webhooks \
-H "Authorization: Bearer $VEETON_KEY"Response · 200
{
"data": [
{
"id": "01HX5K2MZ7A3Q4FBNDC0EVDXYW",
"url": "https://example.com/…",
"events": [
"task.succeeded"
],
"status": "active",
"description": "A short description.",
"last_delivery_at": "2026-04-27T14:32:00Z",
"created_at": "2026-04-27T14:32:00Z"
}
],
"next_cursor": "eyJpZCI6InByb2RfMDFIWCJ9",
"has_more": true
}Retrieve a webhook
GET/v1/webhooks/{webhook_id}
Parameters
webhook_idstringrequiredCrockford-base32 ULID (26 chars).
Returns
Returns a Webhook object with status 200.
Errors
404Not found
GET/v1/webhooks/{webhook_id}
curl https://api.veeton.com/v1/webhooks/01HX5K2MZ7A3Q4FBNDC0EVDXY1 \
-H "Authorization: Bearer $VEETON_KEY"Response · 200
{
"id": "01HX5K2MZ7A3Q4FBNDC0EVDXYW",
"url": "https://example.com/…",
"events": [
"task.succeeded"
],
"status": "active",
"description": "A short description.",
"last_delivery_at": "2026-04-27T14:32:00Z",
"created_at": "2026-04-27T14:32:00Z"
}Update a webhook
PATCH/v1/webhooks/{webhook_id}
Pass rotate_secret: true to mint a new signing_secret (returned once in the response). The previous secret is invalidated immediately — plan for a brief gap if your receiver verifies signatures synchronously during a deploy.
Parameters
webhook_idstringrequiredCrockford-base32 ULID (26 chars).
Body · application/json
eventsarray of enumsoptionalstatusenumoptionalactivepaused
descriptionstring, nullableoptionalrotate_secretbooleanoptionalWhen true, mints a fresh signing_secret and returns it once.
Returns
Returns a WebhookUpdateResponse object with status 200.
Errors
404Not found
500Server error
PATCH/v1/webhooks/{webhook_id}
curl -X PATCH \
https://api.veeton.com/v1/webhooks/01HX5K2MZ7A3Q4FBNDC0EVDXY1 \
-H "Authorization: Bearer $VEETON_KEY" \
-H "Content-Type: application/json" \
-d '{
"events": [
"task.succeeded"
],
"status": "active",
"description": "A short description.",
"rotate_secret": true
}'Response · 200
{
"id": "01HX5K2MZ7A3Q4FBNDC0EVDXYW",
"url": "https://example.com/…",
"events": [
"task.succeeded"
],
"status": "active",
"description": "A short description.",
"last_delivery_at": "2026-04-27T14:32:00Z",
"created_at": "2026-04-27T14:32:00Z",
"signing_secret": "whsec_2c7f9b41...e1"
}Delete a webhook
DELETE/v1/webhooks/{webhook_id}
Parameters
webhook_idstringrequiredCrockford-base32 ULID (26 chars).
Returns
An empty response with status 204.
Errors
404Not found
500Server error
DELETE/v1/webhooks/{webhook_id}
curl -X DELETE \
https://api.veeton.com/v1/webhooks/01HX5K2MZ7A3Q4FBNDC0EVDXY1 \
-H "Authorization: Bearer $VEETON_KEY"