Référence API
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.
L'objet Webhook
Attributs
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.updated_attimestampLast change tourl,events,statusordescription.
L'objet Webhook
{
"id": "01HX5K2MZ7A3Q4FBNDC0EVDXYW",
"url": "https://example.com/…",
"events": [
"task.completed"
],
"status": "active",
"description": "A short description.",
"last_delivery_at": "2026-04-27T14:32:00Z",
"created_at": "2026-04-27T14:32:00Z",
"updated_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.
Paramètres
urlstring (URL)requisPublichttps://endpoint on the default port, without embedded credentials.eventsarray of enumsrequisdescriptionstringoptionnel
Retour
Retourne un objet WebhookCreateResponse avec le statut 201.
Erreurs
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.completed"
],
"description": "A short description."
}'Réponse · 201
{
"id": "01HX5K2MZ7A3Q4FBNDC0EVDXYW",
"url": "https://example.com/…",
"events": [
"task.completed"
],
"status": "active",
"description": "A short description.",
"last_delivery_at": "2026-04-27T14:32:00Z",
"created_at": "2026-04-27T14:32:00Z",
"updated_at": "2026-04-27T14:32:00Z",
"signing_secret": "whsec_2c7f9b41...e1"
}List webhooks
GET/v1/webhooks
Paramètres
limitinteger· queryoptionnelcursorstring· queryoptionnel
Retour
Retourne un objet WebhookList avec le statut 200.
Erreurs
400Invalid request
500Server error
GET/v1/webhooks
curl https://api.veeton.com/v1/webhooks \
-H "Authorization: Bearer $VEETON_KEY"Réponse · 200
{
"data": [
{
"id": "01HX5K2MZ7A3Q4FBNDC0EVDXYW",
"url": "https://example.com/…",
"events": [
"task.completed"
],
"status": "active",
"description": "A short description.",
"last_delivery_at": "2026-04-27T14:32:00Z",
"created_at": "2026-04-27T14:32:00Z",
"updated_at": "2026-04-27T14:32:00Z"
}
],
"next_cursor": "eyJpZCI6InByb2RfMDFIWCJ9",
"has_more": true
}Retrieve a webhook
GET/v1/webhooks/{webhook_id}
Paramètres
webhook_idstringrequisCrockford-base32 ULID (26 chars).
Retour
Retourne un objet Webhook avec le statut 200.
Erreurs
404Not found
GET/v1/webhooks/{webhook_id}
curl https://api.veeton.com/v1/webhooks/01HX5K2MZ7A3Q4FBNDC0EVDXY1 \
-H "Authorization: Bearer $VEETON_KEY"Réponse · 200
{
"id": "01HX5K2MZ7A3Q4FBNDC0EVDXYW",
"url": "https://example.com/…",
"events": [
"task.completed"
],
"status": "active",
"description": "A short description.",
"last_delivery_at": "2026-04-27T14:32:00Z",
"created_at": "2026-04-27T14:32:00Z",
"updated_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.
Paramètres
webhook_idstringrequisCrockford-base32 ULID (26 chars).
Corps · application/json
eventsarray of enumsoptionnelstatusenumoptionnelactivepaused
descriptionstring, nullableoptionnelrotate_secretbooleanoptionnelWhen true, mints a fresh signing_secret and returns it once.
Retour
Retourne un objet WebhookUpdateResponse avec le statut 200.
Erreurs
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.completed"
],
"status": "active",
"description": "A short description.",
"rotate_secret": true
}'Réponse · 200
{
"id": "01HX5K2MZ7A3Q4FBNDC0EVDXYW",
"url": "https://example.com/…",
"events": [
"task.completed"
],
"status": "active",
"description": "A short description.",
"last_delivery_at": "2026-04-27T14:32:00Z",
"created_at": "2026-04-27T14:32:00Z",
"updated_at": "2026-04-27T14:32:00Z",
"signing_secret": "whsec_2c7f9b41...e1"
}Delete a webhook
DELETE/v1/webhooks/{webhook_id}
Paramètres
webhook_idstringrequisCrockford-base32 ULID (26 chars).
Retour
Une réponse vide avec le statut 204.
Erreurs
404Not found
500Server error
DELETE/v1/webhooks/{webhook_id}
curl -X DELETE \
https://api.veeton.com/v1/webhooks/01HX5K2MZ7A3Q4FBNDC0EVDXY1 \
-H "Authorization: Bearer $VEETON_KEY"