Features

Delivery & Retries

Outpost keeps track of each event, its status, and the delivery attempts. Outpost operates on an at-least-once delivery guarantee, meaning messages may be re-delivered. While this should be rare, consumers can use the unique Event ID to deduplicate messages.

Automatic Retries

By default, Outpost will automatically retry events if the destination is unavailable, has incorrect configuration, or if the destination returns a non-2xx HTTP response code. Automatic retries are enabled by default, and the retry strategy can be configured using the environment variables MAX_RETRY_LIMIT and RETRY_INTERVAL_SECONDS.

The retry interval uses an exponential backoff algorithm with a base of 2.

Manual Retries

Manual retries can be triggered for any given event via the Event API or user portal.

Disabled destinations

If the destination for an event is disabled—through the API, user portal, or automatically because a failure threshold has been reached—the event will be discarded and cannot be retried.

Webhook signature & headers

For the webhook destination type, Outpost will automatically add the following headers to the webhook request:

  • X-Event-ID: The unique ID of the event.
  • X-Event-Timestamp: The timestamp of the event in ISO 8601 format.
  • X-Event-Topic: The topic of the event.
  • X-Event-Signature: A HMAC-SHA256 signature of the event.

For backward compatibility with your existing webhook implementation, you can change the header prefix, disable headers, or customize the signature algorithm and logic. You can refer to the migration guide to learn more.

The following environment variables can be used to customize the webhook behavior:

Environment VariableDefault ValueRequired
DESTINATIONS_WEBHOOK_HEADER_PREFIXx-No
DESTINATIONS_WEBHOOK_DISABLE_EVENT_ID_HEADERfalseNo
DESTINATIONS_WEBHOOK_DISABLE_SIGNATURE_HEADERfalseNo
DESTINATIONS_WEBHOOK_DISABLE_TIMESTAMP_HEADERfalseNo
DESTINATIONS_WEBHOOK_DISABLE_TOPIC_HEADERfalseNo
DESTINATIONS_WEBHOOK_SIGNATURE_VALUE_TEMPLATE{{.Timestamp.Unix}}.{{.Body}}No
DESTINATIONS_WEBHOOK_SIGNATURE_HEADER_TEMPLATEt={{.Timestamp.Unix}},v0={{.Signatures | join ","}}No
DESTINATIONS_WEBHOOK_SIGNATURE_ENCODINGhexNo
DESTINATIONS_WEBHOOK_SIGNATURE_ALGORITHMhmac-sha256No