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.
| Type | Description | Auth |
|---|---|---|
http | Deliver to any HTTP endpoint | Bearer, Basic, API key, or custom headers |
aws_sqs | Push to an SQS queue | AWS SigV4 (crypto.subtle) |
aws_s3 | Write objects to an S3 bucket | AWS SigV4 |
aws_eventbridge | Publish to an EventBridge bus | AWS SigV4 |
gcp_pubsub | Publish to a Pub/Sub topic | Service account JWT |
kafka | Produce via Confluent REST Proxy | Basic / API key |
rabbitmq | Publish via the HTTP Management API | Basic auth |
websocket | Broadcast 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_type—exponential,linear, orfixedintervals— 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.