Speko Docs

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

MethodReturns
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

MethodReturns
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.

On this page