Releases: hookdeck/outpost
Releases · hookdeck/outpost
v0.16.0
Warning: This release contains significant breaking changes. Please review the v0.16 Migration Guide before upgrading.
⚠️ Breaking Changes
- Webhook signing secret prefix changed to
whsec_— New webhook destinations now generate secrets prefixed withwhsec_. SetDESTINATIONS_WEBHOOK_SIGNING_SECRET_TEMPLATE={{.RandomHex}}to preserve previous behavior. Existing destinations are unaffected. by @alexluong in #808, #792 - Event
destination_idreplaced withmatched_destination_ids— Events now return an array of matched destination IDs instead of a singledestination_id. Supports filtering viaGET /events?destination_id=. No backfill for existing events. by @alexluong in #801 - Delivery metadata timestamp switched from Unix to ISO 8601 — The
timestampfield in delivery metadata is now RFC 3339 format instead of Unix seconds. by @alexluong in #803 - Response data body stored as raw string —
response_data.bodyis now always a string, even for JSON responses. Theattempts.response_dataDB column migrated from JSONB to TEXT (migration000009). by @alexluong in #723 - Alert callbacks replaced by operator events —
ALERT_CALLBACK_URLremoved. Migrate toOPERATOR_EVENTS_*config with HTTP, AWS SQS, GCP Pub/Sub, or RabbitMQ sinks. Alert defaults also changed: consecutive failure count 20→100, auto-disable true→false. by @alexluong in #807, #813, #819 ORGANIZATION_NAMEconfig removed — UseHTTP_USER_AGENTdirectly for custom User-Agent strings. by @alexluong in #810
Features
- Apache Kafka destination provider with PLAIN, SCRAM-SHA-256, and SCRAM-SHA-512 SASL auth by @alexluong in #779
- Operator events system — subscribe to delivery failures, destination disabling, retry exhaustion, and subscription changes via HTTP, AWS SQS, GCP Pub/Sub, or RabbitMQ by @alexluong in #807
- Portal: JSON viewer with syntax highlighting, collapsible sections, and copy-to-clipboard by @alexluong in #800
- Portal: URL-based routing for create destination steps (browser back/forward works between steps) by @alexluong in #793
destination_typeadded to attempts table, API responses, and metrics (with filtering support) by @alexluong in #805- Configurable webhook signing secret template with
RandomHex,RandomBase64, andRandomAlphanumericvariables by @alexluong in #792 - Support empty webhook header prefix (set to whitespace to disable prefix) by @alexluong in #797
Refactors
- Idempotent AlertStore using Redis Sets (keyed by attemptID) instead of INCR/GET, making replayed messages safe by @alexluong in #804
- Eliminated hidden webhook defaults — config owns all defaults explicitly by @alexluong in #808
Fixes
- Manual retries now derive
attempt_numberfrom logstore instead of hardcoding 0 by @alexluong in #781 - Redis control plane keys scoped by deployment ID, preventing cross-deployment conflicts by @alexluong in #742
DELETE /destinationsnow returns{ "success": true }matching other delete endpoints by @alexluong in #798- Added missing
keyproperty toDestinationSchemaFieldin OpenAPI spec by @alexluong in #812
Updates
- Webhook signature verification docs updated and migrated to official SDK by @leggetter in #806
- Docs/examples: webhook defaults, SDK Node.js demo, API path fixes by @leggetter in #802
Full Changelog: v0.15.0...v0.16.0
typescript - sdks/outpost-typescript/v0.10.0 - 2026-04-10 21:04:16
Generated by Speakeasy CLI
Typescript SDK Changes:
outpost.events.list():request.destinationIdAddedresponse.models[]Changed (Breaking⚠️ )
outpost.events.get():responseChanged (Breaking⚠️ )outpost.schemas.listDestinationTypes():response.[].configFields[]Changed (Breaking⚠️ )outpost.schemas.getDestinationType():request.typeChangedresponse.configFields[]Changed (Breaking⚠️ )
Generated with Speakeasy CLI 1.761.3
Publishing Completed
python - sdks/outpost-python/v0.9.0 - 2026-04-10 20:50:33
Generated by Speakeasy CLI
Python SDK Changes:
outpost.events.list():request.destination_idAddedresponse.models[]Changed (Breaking⚠️ )
outpost.events.get():responseChanged (Breaking⚠️ )outpost.schemas.list_destination_types():response.[].config_fields[]Changed (Breaking⚠️ )outpost.schemas.get_destination_type():request.typeChangedresponse.config_fields[]Changed (Breaking⚠️ )
Generated with Speakeasy CLI 1.761.3
Publishing Completed
go - sdks/outpost-go/v0.9.0 - 2026-04-10 20:27:23
Generated by Speakeasy CLI
github.com/hookdeck/outpost/sdks/outpost-go 0.9.0
Go SDK Changes:
Outpost.Events.List():request.Request.DestinationIdAddedresponse.Models[]Changed (Breaking⚠️ )
Outpost.Events.Get():responseChanged (Breaking⚠️ )Outpost.Schemas.ListDestinationTypes():response.[].ConfigFields[]Changed (Breaking⚠️ )Outpost.Schemas.GetDestinationType():request.TypeChangedresponse.ConfigFields[]Changed (Breaking⚠️ )
Generated with Speakeasy CLI 1.761.3
typescript - sdks/outpost-typescript/v0.9.2 - 2026-03-25 17:49:22
Generated by Speakeasy CLI
Typescript SDK Changes:
outpost.attempts.list():response.models[]Changed (Breaking⚠️ )outpost.attempts.get():responseChanged (Breaking⚠️ )outpost.destinations.listAttempts():response.models[]Changed (Breaking⚠️ )outpost.destinations.getAttempt():responseChanged (Breaking⚠️ )outpost.metrics.getEventMetrics(): Addedoutpost.metrics.getAttemptMetrics(): Added
Generated with Speakeasy CLI 1.759.1
Publishing Completed
python - sdks/outpost-python/v0.8.2 - 2026-03-25 17:49:10
Generated by Speakeasy CLI
Python SDK Changes:
outpost.attempts.list():response.models[]Changed (Breaking⚠️ )outpost.attempts.get():responseChanged (Breaking⚠️ )outpost.destinations.list_attempts():response.models[]Changed (Breaking⚠️ )outpost.destinations.get_attempt():responseChanged (Breaking⚠️ )outpost.metrics.get_event_metrics(): Addedoutpost.metrics.get_attempt_metrics(): Added
Generated with Speakeasy CLI 1.759.1
Publishing Completed
go - sdks/outpost-go/v0.8.2 - 2026-03-25 17:49:14
Generated by Speakeasy CLI
github.com/hookdeck/outpost/sdks/outpost-go 0.8.2
Go SDK Changes:
Outpost.Attempts.List():response.Models[]Changed (Breaking⚠️ )Outpost.Attempts.Get():responseChanged (Breaking⚠️ )Outpost.Destinations.ListAttempts():response.Models[]Changed (Breaking⚠️ )Outpost.Destinations.GetAttempt():responseChanged (Breaking⚠️ )Outpost.Metrics.GetEventMetrics(): AddedOutpost.Metrics.GetAttemptMetrics(): Added
Generated with Speakeasy CLI 1.759.1
v0.15.0
Features
- Metrics — New metrics API (Postgres and ClickHouse) and portal UI (#734, #762, #771, #777, #782)
- Include destination in attempts — Add
?include=destinationquery parameter to attempts endpoint (#780) - Helm improvements — Improve deployment configuration options in Helm chart (#773)
Fixes
- 1-based attempt numbering — Change
attempt_numberto 1-based indexing (#740) - MQ consumer reliability — Add exponential backoff retry to MQ consumer on receive errors for more reliable operation (#775)
- key_value_map schema type — Add
key_value_maptoDestinationSchemaFieldtype enum (#763)
Full Changelog: v0.14.0...v0.15.0
typescript - sdks/outpost-typescript/v0.9.1 - 2026-03-15 17:53:47
Generated by Speakeasy CLI
Typescript SDK Changes:
outpost.schemas.listDestinationTypes():response.[].configFields[].type.enum(keyValueMap)Added (Breaking⚠️ )outpost.schemas.getDestinationType():response.configFields[].type.enum(keyValueMap)Added (Breaking⚠️ )
Generated with Speakeasy CLI 1.755.0
Publishing Completed
python - sdks/outpost-python/v0.8.1 - 2026-03-15 17:50:55
Generated by Speakeasy CLI
Python SDK Changes:
outpost.schemas.list_destination_types():response.[].config_fields[].type.enum(key_value_map)Added (Breaking⚠️ )outpost.schemas.get_destination_type():response.config_fields[].type.enum(key_value_map)Added (Breaking⚠️ )
Generated with Speakeasy CLI 1.755.0
Publishing Completed