Skip to content

Webhooks

Webhooks send HTTP POST requests to your endpoints when events occur. Deliveries are signed with HMAC-SHA256.

EventTrigger
snapshot.createdA new snapshot is created
snapshot.deletedA snapshot is deleted
file.uploadedA file is uploaded
file.deletedA file is deleted
member.invitedA team member is invited
member.removedA team member is removed

POST /machine/webhooks

Roles: owner admin

{
"url": "https://example.com/webhook",
"events": ["snapshot.created", "file.uploaded"],
"secret": "optional-custom-secret"
}
FieldTypeRequiredDescription
urlstringYesEndpoint URL
eventsstring[]YesEvent types to subscribe to
secretstringNoSigning secret (auto-generated if omitted)
{
"id": "a1b2c3d4-...",
"url": "https://example.com/webhook",
"events": ["snapshot.created", "file.uploaded"],
"secret": "the-signing-secret",
"active": true
}

The secret is returned on creation for signature verification. See Webhook Signatures.

GET /machine/webhooks

Secrets are not included in list responses.

{
"webhooks": [
{
"id": "a1b2c3d4-...",
"url": "https://example.com/webhook",
"events": ["snapshot.created"],
"active": true,
"createdAt": "2026-02-07T12:00:00.000Z"
}
]
}

GET /machine/webhooks/:id

Returns the webhook config and last 20 delivery attempts.

{
"id": "a1b2c3d4-...",
"url": "https://example.com/webhook",
"events": ["snapshot.created"],
"active": true,
"createdAt": "2026-02-07T12:00:00.000Z",
"recentDeliveries": [
{
"id": "delivery-uuid",
"event": "snapshot.created",
"responseStatus": 200,
"success": true,
"attemptedAt": "2026-02-07T12:05:00.000Z"
}
]
}

PATCH /machine/webhooks/:id

Roles: owner admin

Update URL, events, or active status. At least one field required.

{
"url": "https://example.com/new-endpoint",
"events": ["snapshot.created", "snapshot.deleted"],
"active": false
}

DELETE /machine/webhooks/:id

Roles: owner admin

Deletes the webhook and all delivery logs.