Destinations

Destination types, authentication, timeouts, and provider configurations.

A destination is where hookstream sends events. Every destination runs inside its own DeliveryScheduler Durable Object — a per-destination state machine that handles delivery, retries, circuit breaking, and dead-letter queue management.

What is a Destination?

Each destination owns a dedicated DeliveryScheduler Durable Object, keyed by destination ID. The DO holds circuit breaker state, schedules retry alarms, and serializes delivery so your downstream service sees a predictable load profile. You never provision or manage these DOs — they exist the moment you create a destination.

Provider Types

hookstream supports 8 destination provider types. Each has its own auth model and payload shape, but connections, filters, and transforms work the same way across all of them.

TypeDescriptionAuth
httpDeliver to any HTTP endpointBearer, Basic, API key, or custom headers
aws_sqsPush to an SQS queueAWS SigV4 (crypto.subtle)
aws_s3Write objects to an S3 bucketAWS SigV4
aws_eventbridgePublish to an EventBridge busAWS SigV4
gcp_pubsubPublish to a Pub/Sub topicService account JWT
kafkaProduce via Confluent REST ProxyBasic / API key
rabbitmqPublish via the HTTP Management APIBasic auth
websocketBroadcast to connected clients

Kafka and RabbitMQ use HTTP-based APIs (Confluent REST Proxy and the RabbitMQ HTTP Management API) because Cloudflare Workers can't speak the native wire protocols.

See the provider reference for detailed configuration per type.

Retry Policy

Every destination has a configurable retry policy:

  • max_retries — maximum retry attempts (default: 5)
  • backoff_typeexponential, linear, or fixed
  • intervals — array of retry delays in seconds (default: [30, 300, 1800, 7200, 86400] — 30s, 5m, 30m, 2h, 24h)

For exponential backoff, each attempt uses the next interval in the array. Linear multiplies the base interval by the attempt number. Fixed uses the first interval every time. Retries are alarm-driven inside the DeliveryScheduler DO — no external queue, no cron polling.

Circuit Breaker

Each destination runs a circuit breaker to protect failing endpoints from being hammered:

  • Closed — normal operation. Deliveries proceed and consecutive failures are tracked.
  • Open — after 5 consecutive failures, deliveries are paused and new events are queued. A cooldown alarm is set.
  • Half-Open — after the cooldown, one probe request is sent. If it succeeds the circuit closes and the queue flushes. If it fails, the circuit re-opens.

Circuit state is visible in the dashboard and queryable via API. You can also manually reset the circuit via POST /v1/destinations/:id/circuit/reset.

Destination Templates

hookstream includes templates for popular destination services with prefilled URLs, headers, and payload shapes:

  • Slack — incoming webhooks
  • Discord — webhooks
  • PagerDuty — Events API v2
  • Datadog — HTTP intake
  • Zapier — webhooks
  • Linear — webhooks

Outbound Signing

HTTP destinations can sign outbound requests using HMAC-SHA256 or HMAC-SHA1 so your receiving endpoint can verify authenticity. The signature is injected into a configurable header (default: X-hookstream-Signature). Pair it with a timestamp header to prevent replay attacks.

Next Steps

HTTP Provider

Configure HTTP destinations with auth, headers, and timeouts.

Learn More
Delivery Pipeline

How events flow from source to destination.

Learn More
Destinations API

Manage destinations programmatically.

Learn More
Connections

Route events from sources into destinations.

Learn More
Ask a question... ⌘I