webhooks
Workspace lifecycle endpoints and delivery logs.
Use speko.webhooks to configure organization-level lifecycle routing. Endpoint secrets are write-only.
const endpoint = await speko.webhooks.create({
name: 'Production events',
url: 'https://hooks.example.com/speko',
events: ['call.status', 'call.report'],
allAgents: true,
filterTags: { environment: 'production' },
});
await speko.webhooks.update(endpoint.id, {
events: ['call.status', 'call.report', 'call.recording'],
});
const failures = await speko.webhooks.deliveries.list({
endpointId: endpoint.id,
status: 'failed',
});
if (failures.data[0]) {
const detail = await speko.webhooks.deliveries.get(failures.data[0].id);
console.log(detail.attempts);
await speko.webhooks.deliveries.redeliver(detail.id);
}Endpoint methods
| Method | Returns |
|---|---|
speko.webhooks.list() | Promise<WebhookEndpoint[]> |
speko.webhooks.create(input) | Promise<WebhookEndpoint> |
speko.webhooks.get(id) | Promise<WebhookEndpoint> |
speko.webhooks.update(id, patch) | Promise<WebhookEndpoint> |
speko.webhooks.delete(id) | Promise<void> |
Delivery methods
| Method | Returns |
|---|---|
speko.webhooks.deliveries.list(filters?) | Cursor-paginated WebhookDeliveryPage |
speko.webhooks.deliveries.get(id) | Sanitized payload and chronological attempts |
speko.webhooks.deliveries.redeliver(id) | The new manual attempt result |
List filters include endpointId, event, agentId, status, sessionId, eventId, from, to, cursor, and limit. The event filter includes both call.* lifecycle events and private phone API imessage.* subscriber events. Delivery data expires after 30 days. Manual redelivery is disabled for pre-call, expired, deleted-endpoint, and provider-retried iMessage deliveries; check canRedeliver before calling it.
See Workspace webhooks for routing, signing, retry, and tag semantics.