> ## Documentation Index
> Fetch the complete documentation index at: https://docs.hookstream.io/llms.txt
> Use this file to discover all available pages before exploring further.

# 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](/providers/http) 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`, 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](/providers/http)**

Configure HTTP destinations with auth, headers, and timeouts.
  **[Delivery Pipeline](/concepts/delivery-pipeline)**

How events flow from source to destination.
  **[Destinations API](/api/destinations)**

Manage destinations programmatically.
  **[Connections](/concepts/connections)**

Route events from sources into destinations.