Event Delivery & Retries

Outpost tracks each event, its status, and all delivery attempts. Delivery operates on an at-least-once guarantee — events may occasionally be re-delivered. Consumers should use the unique event ID to deduplicate when needed.

Automatic Retries

When a delivery attempt fails — because the destination is unavailable, misconfigured, or returns a non-2xx HTTP status — Outpost automatically retries the event.

By default, retries use an exponential backoff algorithm with a base of 2, or you can define a custom retry schedule.

You can configure retry behavior in the Hookdeck General settings or with the Config API using the MAX_RETRY_LIMIT, RETRY_INTERVAL_SECONDS, and RETRY_SCHEDULE variables.

VariableDefaultDescription
MAX_RETRY_LIMIT10Maximum number of retry attempts before giving up
RETRY_INTERVAL_SECONDS30Base interval in seconds for exponential backoff
RETRY_SCHEDULEComma-separated retry delays in seconds. Overrides MAX_RETRY_LIMIT and RETRY_INTERVAL_SECONDS when set

Example custom retry schedule:

{
  "RETRY_SCHEDULE": [30, 60, 300, 900, 3600]
}

Configure retry behavior with environment variables:

VariableDefaultDescription
MAX_RETRY_LIMIT10Maximum number of retry attempts before giving up
RETRY_INTERVAL_SECONDS30Base interval in seconds for exponential backoff
RETRY_SCHEDULEComma-separated retry delays in seconds. Overrides MAX_RETRY_LIMIT and RETRY_INTERVAL_SECONDS when set

Example custom retry schedule:

RETRY_SCHEDULE=30,60,300,900,3600

Manual Retries

Any failed delivery attempt can be manually retried via the Retry API, the tenant portal or Admin UI. Manual retries are available for attempts that have exhausted automatic retries or were skipped due to the destination being disabled.

Disabled Destinations

If a destination is disabled — through the API, tenant portal, or automatically due to a failure threshold — events published to that tenant will not be delivered to it. Disabled destinations cannot be retried until re-enabled.

Delivery Attempts

Each delivery attempt records:

  • The destination it was sent to
  • The HTTP status code and response body (for webhook destinations)
  • The timestamp and attempt number
  • Whether automatic retries are exhausted

Access delivery attempts via the API Reference, the tenant portal, or Admin UI.