Global configuration is provided through environment variables or a YAML config file. When deploying on Kubernetes, use a ConfigMap.

Required Variables

These variables must be set for Outpost to start:

VariableDescription
AES_ENCRYPTION_SECRET16, 24, or 32 byte key for AES encryption of sensitive data
API_JWT_SECRETSecret for signing and verifying JWTs
API_KEYAPI key for authenticating requests to the Outpost API
REDIS_HOSTHostname of the Redis server (default: 127.0.0.1)
REDIS_PORTPort of the Redis server (default: 6379)
REDIS_DATABASERedis database number (default: 0)
REDIS_POOL_SIZEOptional. Connection pool size per Redis client (per node in cluster mode); default 0 uses go-redis's default of 10 per GOMAXPROCS. Raise it when Redis round-trip latency limits throughput; lower it to shrink the pool on hosts with many CPUs.

Message Queue

Choose one message queue provider. The selected provider is used for both event delivery and log queues.

RabbitMQ:

VariableDescription
RABBITMQ_SERVER_URLRabbitMQ connection URL (e.g., amqp://user:pass@host/vhost)
RABBITMQ_EXCHANGEExchange name (default: outpost)

AWS SQS:

VariableDescription
AWS_SQS_ACCESS_KEY_IDAWS Access Key ID (optional; omit to use the AWS SDK default credential chain, e.g. an IAM role)
AWS_SQS_SECRET_ACCESS_KEYAWS Secret Access Key (optional; omit to use the AWS SDK default credential chain, e.g. an IAM role)
AWS_SQS_REGIONAWS Region

Whichever way you authenticate, the principal needs these actions on the Outpost queues: sqs:GetQueueUrl, sqs:SendMessage, sqs:ReceiveMessage, sqs:DeleteMessage, and sqs:ChangeMessageVisibility (the batch API variants are covered by the same actions). With auto-provisioning enabled (the default, MQS_AUTO_PROVISION=true), it also needs sqs:CreateQueue and sqs:GetQueueAttributes. If you manage the queues yourself, the first list is sufficient.

GCP Pub/Sub:

VariableDescription
GCP_PUBSUB_PROJECTGCP Project ID
GCP_PUBSUB_SERVICE_ACCOUNT_CREDENTIALSService account JSON string or file path

Azure Service Bus:

VariableDescription
AZURE_SERVICEBUS_NAMESPACEAzure Service Bus namespace
AZURE_SERVICEBUS_TENANT_IDAzure Active Directory tenant ID
AZURE_SERVICEBUS_CLIENT_IDService principal client ID
AZURE_SERVICEBUS_CLIENT_SECRETService principal client secret

Log Storage

Choose one for event log persistence:

VariableDescription
POSTGRES_URLPostgreSQL connection URL
CLICKHOUSE_ADDRClickHouse address (e.g., localhost:9000)
CLICKHOUSE_LOG_RETENTION_TTL_DAYSDays to retain event and delivery logs in ClickHouse (default: 0, retained indefinitely). No PostgreSQL equivalent; see the Event & Delivery Log guide.

Delivery

VariableDefaultDescription
DELIVERY_MAX_CONCURRENCY1Max concurrent delivery attempts
DELIVERY_TIMEOUT_SECONDS5HTTP request timeout for webhook delivery
MAX_RETRY_LIMIT10Max retry attempts before giving up
RETRY_INTERVAL_SECONDS30Base interval for exponential backoff retries
RETRY_SCHEDULEComma-separated retry delays in seconds (overrides interval/limit)
RETRY_POLL_BACKOFF_MS0 (auto)Maximum time the retry monitor sleeps between polls while idle. 0 sleeps until the next retry comes due, capped at the shorter of 30 seconds and your shortest configured retry delay, so a retry is never late. An explicit positive value is honored as a fixed maximum, which can delay a retry scheduled while the monitor is already sleeping by up to that much.

Topics

VariableDefaultDescription
TOPICSComma-separated list of topics your instance supports
TOPICS_ALLOW_WILDCARDSfalseAllow * inside destination topic subscriptions, such as user.*

Portal

VariableDefaultDescription
PORTAL_REFERER_URLRequired. URL to redirect users to when JWT expires
PORTAL_REFRESH_URLURL in your app to silently re-authenticate and generate a new JWT
PORTAL_ORGANIZATION_NAMEOrganization name shown in the portal header
PORTAL_ACCENT_COLORPrimary brand color (hex code, e.g., #6122E7)
PORTAL_LOGOURL for the light-mode portal logo
PORTAL_LOGO_DARKURL for the dark-mode portal logo
PORTAL_FAVICON_URLURL for the portal favicon
PORTAL_FORCE_THEMEForce portal theme: light or dark
PORTAL_DISABLE_OUTPOST_BRANDINGfalseRemove the "Powered by Outpost" footer
PORTAL_ENABLE_DESTINATION_FILTERfalseShow filter configuration UI per destination
PORTAL_ENABLE_WEBHOOK_CUSTOM_HEADERSfalseAllow tenants to set custom HTTP headers on webhook destinations

Alerts

VariableDefaultDescription
ALERT_CONSECUTIVE_FAILURE_COUNT100Consecutive delivery failures before alerting on a destination (and disabling it when ALERT_AUTO_DISABLE_DESTINATION is true). Leave unset for the default of 100; set to an empty string to disable consecutive-failure alerting entirely.
ALERT_AUTO_DISABLE_DESTINATIONfalseAuto-disable a destination once ALERT_CONSECUTIVE_FAILURE_COUNT is reached. Has no effect when consecutive-failure alerting is disabled.
ALERT_EXHAUSTED_RETRIES_WINDOW_SECONDS3600Suppression window (seconds) for exhausted_retries alerts: the first exhaustion per destination alerts and subsequent ones within the window are suppressed (0 = no suppression, alert on every exhaustion). Leave unset for the default of 3600; set to an empty string to disable exhausted_retries alerting entirely.

Destinations

VariableDefaultDescription
MAX_DESTINATIONS_PER_TENANT20Maximum destinations each tenant may create. Set as low as is practical for your product to limit abuse and load; lowering this value later does not remove destinations that already exist.
DESTINATIONS_METADATA_PATHOptional. Filesystem path to a directory of custom destination metadata (per-type metadata.json and instructions.md). Non-core fields such as label, description, icon, and instructions can be customized; config_fields and credential_fields cannot be overridden.

Webhook Behavior

VariableDefaultDescription
DESTINATIONS_WEBHOOK_MODEdefaultSet to standard for Standard Webhooks compliance
DESTINATIONS_WEBHOOK_PROXY_URLForward proxy for webhook deliveries, e.g. http://user:pass@proxy:8080. See Webhook Forward Proxy.
DESTINATIONS_WEBHOOK_HEADER_PREFIXx-outpost- / webhook-Prefix for system webhook headers (event id, topic, timestamp, signature). Unless overridden, defaults to x-outpost- when DESTINATIONS_WEBHOOK_MODE is default and webhook- when standard.
DESTINATIONS_WEBHOOK_EVENT_ID_HEADER_NAMEComplete name of the event ID header. Unset uses the default <prefix>event-id; an explicit value pins that exact name; an empty string disables the header. Only applies to default mode.
DESTINATIONS_WEBHOOK_SIGNATURE_HEADER_NAMEComplete name of the signature header. Unset uses the default <prefix>signature; an explicit value pins that exact name; an empty string disables the header. Only applies to default mode.
DESTINATIONS_WEBHOOK_TIMESTAMP_HEADER_NAMEComplete name of the timestamp header. Unset uses the default <prefix>timestamp; an explicit value pins that exact name; an empty string disables the header. Only applies to default mode.
DESTINATIONS_WEBHOOK_TOPIC_HEADER_NAMEComplete name of the topic header. Unset uses the default <prefix>topic; an explicit value pins that exact name; an empty string disables the header. Only applies to default mode.
DESTINATIONS_WEBHOOK_SIGNATURE_ALGORITHMhmac-sha256Signature algorithm
DESTINATIONS_WEBHOOK_SIGNATURE_ENCODINGhexEncoding: hex or base64
DESTINATIONS_WEBHOOK_MAX_RESPONSE_BODY_BYTES131072 (128 KiB)Max bytes of a destination response body stored on the delivery attempt. Larger responses are replaced with a placeholder so the attempt log stays under the event queue's per-message size limit. Set to 0 to disable the cap.

Observability

VariableDescription
OTEL_SERVICE_NAMEEnables OpenTelemetry when set. All three signals (traces, metrics, and logs) are exported by default; see OpenTelemetry for per-signal control
LOG_LEVELLog verbosity: trace, debug, info, warn, error (default: info)
DISABLE_TELEMETRYSet to true to disable anonymous usage telemetry to Hookdeck

YAML Configuration

All environment variables can also be specified in a YAML config file using snake_case keys:

aes_encryption_secret: "your-secret-here"
api_jwt_secret: "your-jwt-secret"
api_key: "your-api-key"

topics: "user.created,user.updated,order.placed"

redis:
  host: "127.0.0.1"
  port: 6379
  database: 0

# Choose one message queue:
rabbitmq:
  server_url: "amqp://user:pass@localhost/vhost"

delivery:
  max_concurrency: 5
  timeout_seconds: 10

portal:
  referer_url: "https://yourapp.com/settings/webhooks"
  organization_name: "Acme Corp"
  accent_color: "#6122E7"

alert:
  consecutive_failure_count: 50
  exhausted_retries_window_seconds: 3600