---
title: "Update Destination"
method: PATCH
path: "/{tenant_id}/destinations/{destination_id}"
tags: ["Destinations"]
---

# Update Destination

`PATCH /{tenant_id}/destinations/{destination_id}`

Updates the configuration of an existing destination. The request body structure depends on the destination's `type`. Type itself cannot be updated. May return an OAuth redirect URL for certain types.

## Request body

- union
  - DestinationUpdateWebhook
    - `topics` union — "*" or an array of enabled topics.
      - '*'
      - string[]
    - `filter` Filter, nullable — Optional JSON schema filter for event matching. Events must match this filter to be delivered to this destination. Supports operators: $eq, $neq, $gt, $gte, $lt, $lte, $in, $nin, $startsWith, $endsWith, $exist, $or, $and, $not. If null or empty, all events matching the topic filter will be delivered. To remove an existing filter when updating a destination, set filter to an empty object `{}`.
    - `config` WebhookConfig
      - `url` string, url, required — The URL to send the webhook events to.
      - `custom_headers` string — JSON string of custom HTTP headers to include with every webhook request. Header names must be valid HTTP header tokens (alphanumeric, hyphens, underscores). Reserved headers (Content-Type, Host, etc.) cannot be overridden.
    - `credentials` WebhookCredentialsUpdate
      - `secret` string — New secret (only allowed for admin).
      - `previous_secret` string — Previous secret for rotation (only allowed for admin).
      - `previous_secret_invalid_at` string, date-time — Invalidation time for previous secret (only allowed for admin).
      - `rotate_secret` boolean — Set to true to rotate the secret. The current secret becomes the previous_secret, and a new secret is generated. `previous_secret_invalid_at` defaults to 24h if not provided.
    - `delivery_metadata` object, nullable — Static key-value pairs merged into event metadata on every delivery.
    - `metadata` object, nullable — Arbitrary contextual information stored with the destination.
  - DestinationUpdateAWSSQS
    - `topics` union — "*" or an array of enabled topics.
      - '*'
      - string[]
    - `filter` Filter, nullable — Optional JSON schema filter for event matching. Events must match this filter to be delivered to this destination. Supports operators: $eq, $neq, $gt, $gte, $lt, $lte, $in, $nin, $startsWith, $endsWith, $exist, $or, $and, $not. If null or empty, all events matching the topic filter will be delivered. To remove an existing filter when updating a destination, set filter to an empty object `{}`.
    - `config` AWSSQSConfig
      - `endpoint` string, url — Optional. Custom AWS endpoint URL (e.g., for LocalStack or specific regions).
      - `queue_url` string, url, required — The URL of the SQS queue.
    - `credentials` AWSSQSCredentials
      - `key` string, required — AWS Access Key ID.
      - `secret` string, required — AWS Secret Access Key.
      - `session` string — Optional AWS Session Token (for temporary credentials).
    - `delivery_metadata` object, nullable — Static key-value pairs merged into event metadata on every delivery.
    - `metadata` object, nullable — Arbitrary contextual information stored with the destination.
  - DestinationUpdateRabbitMQ
    - `topics` union — "*" or an array of enabled topics.
      - '*'
      - string[]
    - `filter` Filter, nullable — Optional JSON schema filter for event matching. Events must match this filter to be delivered to this destination. Supports operators: $eq, $neq, $gt, $gte, $lt, $lte, $in, $nin, $startsWith, $endsWith, $exist, $or, $and, $not. If null or empty, all events matching the topic filter will be delivered. To remove an existing filter when updating a destination, set filter to an empty object `{}`.
    - `config` RabbitMQConfig
      - `server_url` string, required — RabbitMQ server address (host:port).
      - `exchange` string, required — The exchange to publish messages to.
      - `tls` 'true' | 'false' — Whether to use TLS connection (amqps). Defaults to "false".
    - `credentials` RabbitMQCredentials
      - `username` string, required — RabbitMQ username.
      - `password` string, required — RabbitMQ password.
    - `delivery_metadata` object, nullable — Static key-value pairs merged into event metadata on every delivery.
    - `metadata` object, nullable — Arbitrary contextual information stored with the destination.
  - DestinationUpdateHookdeck
    - `topics` union — "*" or an array of enabled topics.
      - '*'
      - string[]
    - `filter` Filter, nullable — Optional JSON schema filter for event matching. Events must match this filter to be delivered to this destination. Supports operators: $eq, $neq, $gt, $gte, $lt, $lte, $in, $nin, $startsWith, $endsWith, $exist, $or, $and, $not. If null or empty, all events matching the topic filter will be delivered. To remove an existing filter when updating a destination, set filter to an empty object `{}`.
    - `config` unknown
    - `credentials` HookdeckCredentials
      - `token` string, required — Hookdeck authentication token.
    - `delivery_metadata` object, nullable — Static key-value pairs merged into event metadata on every delivery.
    - `metadata` object, nullable — Arbitrary contextual information stored with the destination.
  - DestinationUpdateAWSKinesis
    - `topics` union — "*" or an array of enabled topics.
      - '*'
      - string[]
    - `filter` Filter, nullable — Optional JSON schema filter for event matching. Events must match this filter to be delivered to this destination. Supports operators: $eq, $neq, $gt, $gte, $lt, $lte, $in, $nin, $startsWith, $endsWith, $exist, $or, $and, $not. If null or empty, all events matching the topic filter will be delivered. To remove an existing filter when updating a destination, set filter to an empty object `{}`.
    - `config` AWSKinesisConfig
      - `stream_name` string, required — The name of the AWS Kinesis stream.
      - `region` string, required — The AWS region where the Kinesis stream is located.
      - `endpoint` string, url — Optional. Custom AWS endpoint URL (e.g., for LocalStack or VPC endpoints).
      - `partition_key_template` string — Optional. JMESPath template to extract the partition key from the event payload (e.g., `metadata."event-id"`). Defaults to event ID.
    - `credentials` AWSKinesisCredentials
      - `key` string, required — AWS Access Key ID.
      - `secret` string, required — AWS Secret Access Key.
      - `session` string — Optional AWS Session Token (for temporary credentials).
    - `delivery_metadata` object, nullable — Static key-value pairs merged into event metadata on every delivery.
    - `metadata` object, nullable — Arbitrary contextual information stored with the destination.
  - DestinationUpdateAzureServiceBus
    - `topics` union — "*" or an array of enabled topics.
      - '*'
      - string[]
    - `filter` Filter, nullable — Optional JSON schema filter for event matching. Events must match this filter to be delivered to this destination. Supports operators: $eq, $neq, $gt, $gte, $lt, $lte, $in, $nin, $startsWith, $endsWith, $exist, $or, $and, $not. If null or empty, all events matching the topic filter will be delivered. To remove an existing filter when updating a destination, set filter to an empty object `{}`.
    - `config` AzureServiceBusConfig
      - `name` string, required — The name of the Azure Service Bus queue or topic to publish messages to.
    - `credentials` AzureServiceBusCredentials
      - `connection_string` string, required — The connection string for the Azure Service Bus namespace.
    - `delivery_metadata` object, nullable — Static key-value pairs merged into event metadata on every delivery.
    - `metadata` object, nullable — Arbitrary contextual information stored with the destination.
  - DestinationUpdateAWSS3
    - `topics` union — "*" or an array of enabled topics.
      - '*'
      - string[]
    - `filter` Filter, nullable — Optional JSON schema filter for event matching. Events must match this filter to be delivered to this destination. Supports operators: $eq, $neq, $gt, $gte, $lt, $lte, $in, $nin, $startsWith, $endsWith, $exist, $or, $and, $not. If null or empty, all events matching the topic filter will be delivered. To remove an existing filter when updating a destination, set filter to an empty object `{}`.
    - `config` AWSS3Config
      - `bucket` string, required — The name of your AWS S3 bucket.
      - `region` string, required — The AWS region where your bucket is located.
      - `key_template` string — JMESPath expression for generating S3 object keys. Default is join('', [time.rfc3339_nano, '_', metadata."event-id", '.json']).
      - `storage_class` string — The storage class for the S3 objects (e.g., STANDARD, INTELLIGENT_TIERING, GLACIER, etc.). Defaults to "STANDARD".
    - `credentials` AWSS3Credentials
      - `key` string, required — AWS Access Key ID.
      - `secret` string, required — AWS Secret Access Key.
      - `session` string — Optional AWS Session Token (for temporary credentials).
    - `delivery_metadata` object, nullable — Static key-value pairs merged into event metadata on every delivery.
    - `metadata` object, nullable — Arbitrary contextual information stored with the destination.
  - DestinationUpdateGCPPubSub
    - `topics` union — "*" or an array of enabled topics.
      - '*'
      - string[]
    - `filter` Filter, nullable — Optional JSON schema filter for event matching. Events must match this filter to be delivered to this destination. Supports operators: $eq, $neq, $gt, $gte, $lt, $lte, $in, $nin, $startsWith, $endsWith, $exist, $or, $and, $not. If null or empty, all events matching the topic filter will be delivered. To remove an existing filter when updating a destination, set filter to an empty object `{}`.
    - `config` GCPPubSubConfig
      - `project_id` string, required — The GCP project ID.
      - `topic` string, required — The Pub/Sub topic name.
      - `endpoint` string — Optional. Custom endpoint URL (e.g., localhost:8085 for emulator).
    - `credentials` GCPPubSubCredentials
      - `service_account_json` string, required — Service account key JSON. The entire JSON key file content as a string.
    - `delivery_metadata` object, nullable — Static key-value pairs merged into event metadata on every delivery.
    - `metadata` object, nullable — Arbitrary contextual information stored with the destination.

## Response `200`

Destination updated successfully or OAuth redirect needed.

- union
  - DestinationWebhook
    - `id` string, required — Control plane generated ID or user provided ID for the destination.
    - `type` 'webhook', required — Type of the destination.
    - `topics` union, required — "*" or an array of enabled topics.
      - '*'
      - string[]
    - `filter` Filter, nullable — Optional JSON schema filter for event matching. Events must match this filter to be delivered to this destination. Supports operators: $eq, $neq, $gt, $gte, $lt, $lte, $in, $nin, $startsWith, $endsWith, $exist, $or, $and, $not. If null or empty, all events matching the topic filter will be delivered. To remove an existing filter when updating a destination, set filter to an empty object `{}`.
    - `disabled_at` string, date-time, nullable, required — ISO Date when the destination was disabled, or null if enabled.
    - `created_at` string, date-time, required — ISO Date when the destination was created.
    - `updated_at` string, date-time, required — ISO Date when the destination was last updated.
    - `config` WebhookConfig, required
      - `url` string, url, required — The URL to send the webhook events to.
      - `custom_headers` string — JSON string of custom HTTP headers to include with every webhook request. Header names must be valid HTTP header tokens (alphanumeric, hyphens, underscores). Reserved headers (Content-Type, Host, etc.) cannot be overridden.
    - `credentials` WebhookCredentials, required
      - `secret` string — The secret used for signing webhook requests. Auto-generated if omitted on creation by admin. Read-only for tenants unless rotating.
      - `previous_secret` string — The previous secret used during rotation. Valid for 24 hours by default. Read-only.
      - `previous_secret_invalid_at` string, date-time — ISO timestamp when the previous secret becomes invalid. Read-only.
    - `delivery_metadata` object, nullable — Static key-value pairs merged into event metadata on every delivery.
    - `metadata` object, nullable — Arbitrary contextual information stored with the destination.
    - `target` string — A human-readable representation of the destination target (e.g., URL host). Read-only.
    - `target_url` string, url, nullable — A URL link to the destination target (the webhook URL). Read-only.
  - DestinationAWSSQS
    - `id` string, required — Control plane generated ID or user provided ID for the destination.
    - `type` 'aws_sqs', required — Type of the destination.
    - `topics` union, required — "*" or an array of enabled topics.
      - '*'
      - string[]
    - `filter` Filter, nullable — Optional JSON schema filter for event matching. Events must match this filter to be delivered to this destination. Supports operators: $eq, $neq, $gt, $gte, $lt, $lte, $in, $nin, $startsWith, $endsWith, $exist, $or, $and, $not. If null or empty, all events matching the topic filter will be delivered. To remove an existing filter when updating a destination, set filter to an empty object `{}`.
    - `disabled_at` string, date-time, nullable, required — ISO Date when the destination was disabled, or null if enabled.
    - `created_at` string, date-time, required — ISO Date when the destination was created.
    - `updated_at` string, date-time, required — ISO Date when the destination was last updated.
    - `config` AWSSQSConfig, required
      - `endpoint` string, url — Optional. Custom AWS endpoint URL (e.g., for LocalStack or specific regions).
      - `queue_url` string, url, required — The URL of the SQS queue.
    - `credentials` AWSSQSCredentials, required
      - `key` string, required — AWS Access Key ID.
      - `secret` string, required — AWS Secret Access Key.
      - `session` string — Optional AWS Session Token (for temporary credentials).
    - `delivery_metadata` object, nullable — Static key-value pairs merged into event metadata on every delivery.
    - `metadata` object, nullable — Arbitrary contextual information stored with the destination.
    - `target` string — A human-readable representation of the destination target (SQS queue name). Read-only.
    - `target_url` string, url, nullable — A URL link to the destination target (AWS Console link to the queue). Read-only.
  - DestinationRabbitMQ
    - `id` string, required — Control plane generated ID or user provided ID for the destination.
    - `type` 'rabbitmq', required — Type of the destination.
    - `topics` union, required — "*" or an array of enabled topics.
      - '*'
      - string[]
    - `filter` Filter, nullable — Optional JSON schema filter for event matching. Events must match this filter to be delivered to this destination. Supports operators: $eq, $neq, $gt, $gte, $lt, $lte, $in, $nin, $startsWith, $endsWith, $exist, $or, $and, $not. If null or empty, all events matching the topic filter will be delivered. To remove an existing filter when updating a destination, set filter to an empty object `{}`.
    - `disabled_at` string, date-time, nullable, required — ISO Date when the destination was disabled, or null if enabled.
    - `created_at` string, date-time, required — ISO Date when the destination was created.
    - `updated_at` string, date-time, required — ISO Date when the destination was last updated.
    - `config` RabbitMQConfig, required
      - `server_url` string, required — RabbitMQ server address (host:port).
      - `exchange` string, required — The exchange to publish messages to.
      - `tls` 'true' | 'false' — Whether to use TLS connection (amqps). Defaults to "false".
    - `credentials` RabbitMQCredentials, required
      - `username` string, required — RabbitMQ username.
      - `password` string, required — RabbitMQ password.
    - `delivery_metadata` object, nullable — Static key-value pairs merged into event metadata on every delivery.
    - `metadata` object, nullable — Arbitrary contextual information stored with the destination.
    - `target` string — A human-readable representation of the destination target (RabbitMQ exchange). Read-only.
    - `target_url` string, url, nullable — A URL link to the destination target (not applicable for RabbitMQ exchange). Read-only.
  - DestinationHookdeck
    - `id` string, required — Control plane generated ID or user provided ID for the destination.
    - `type` 'hookdeck', required — Type of the destination.
    - `topics` union, required — "*" or an array of enabled topics.
      - '*'
      - string[]
    - `filter` Filter, nullable — Optional JSON schema filter for event matching. Events must match this filter to be delivered to this destination. Supports operators: $eq, $neq, $gt, $gte, $lt, $lte, $in, $nin, $startsWith, $endsWith, $exist, $or, $and, $not. If null or empty, all events matching the topic filter will be delivered. To remove an existing filter when updating a destination, set filter to an empty object `{}`.
    - `disabled_at` string, date-time, nullable, required — ISO Date when the destination was disabled, or null if enabled.
    - `created_at` string, date-time, required — ISO Date when the destination was created.
    - `updated_at` string, date-time — ISO Date when the destination was last updated.
    - `config` unknown
    - `credentials` HookdeckCredentials, required
      - `token` string, required — Hookdeck authentication token.
    - `delivery_metadata` object, nullable — Static key-value pairs merged into event metadata on every delivery.
    - `metadata` object, nullable — Arbitrary contextual information stored with the destination.
    - `target` string — A human-readable representation of the destination target (Hookdeck). Read-only.
    - `target_url` string, url, nullable — A URL link to the destination target (e.g., Hookdeck dashboard). Read-only.
  - DestinationAWSKinesis
    - `id` string, required — Control plane generated ID or user provided ID for the destination.
    - `type` 'aws_kinesis', required — Type of the destination.
    - `topics` union, required — "*" or an array of enabled topics.
      - '*'
      - string[]
    - `filter` Filter, nullable — Optional JSON schema filter for event matching. Events must match this filter to be delivered to this destination. Supports operators: $eq, $neq, $gt, $gte, $lt, $lte, $in, $nin, $startsWith, $endsWith, $exist, $or, $and, $not. If null or empty, all events matching the topic filter will be delivered. To remove an existing filter when updating a destination, set filter to an empty object `{}`.
    - `disabled_at` string, date-time, nullable, required — ISO Date when the destination was disabled, or null if enabled.
    - `created_at` string, date-time, required — ISO Date when the destination was created.
    - `updated_at` string, date-time, required — ISO Date when the destination was last updated.
    - `config` AWSKinesisConfig, required
      - `stream_name` string, required — The name of the AWS Kinesis stream.
      - `region` string, required — The AWS region where the Kinesis stream is located.
      - `endpoint` string, url — Optional. Custom AWS endpoint URL (e.g., for LocalStack or VPC endpoints).
      - `partition_key_template` string — Optional. JMESPath template to extract the partition key from the event payload (e.g., `metadata."event-id"`). Defaults to event ID.
    - `credentials` AWSKinesisCredentials, required
      - `key` string, required — AWS Access Key ID.
      - `secret` string, required — AWS Secret Access Key.
      - `session` string — Optional AWS Session Token (for temporary credentials).
    - `delivery_metadata` object, nullable — Static key-value pairs merged into event metadata on every delivery.
    - `metadata` object, nullable — Arbitrary contextual information stored with the destination.
    - `target` string — A human-readable representation of the destination target (Kinesis stream name). Read-only.
    - `target_url` string, url, nullable — A URL link to the destination target (AWS Console link to the stream). Read-only.
  - DestinationAzureServiceBus
    - `id` string, required — Control plane generated ID or user provided ID for the destination.
    - `type` 'azure_servicebus', required — Type of the destination.
    - `topics` union, required — "*" or an array of enabled topics.
      - '*'
      - string[]
    - `filter` Filter, nullable — Optional JSON schema filter for event matching. Events must match this filter to be delivered to this destination. Supports operators: $eq, $neq, $gt, $gte, $lt, $lte, $in, $nin, $startsWith, $endsWith, $exist, $or, $and, $not. If null or empty, all events matching the topic filter will be delivered. To remove an existing filter when updating a destination, set filter to an empty object `{}`.
    - `disabled_at` string, date-time, nullable, required — ISO Date when the destination was disabled, or null if enabled.
    - `created_at` string, date-time, required — ISO Date when the destination was created.
    - `updated_at` string, date-time — ISO Date when the destination was last updated.
    - `config` AzureServiceBusConfig, required
      - `name` string, required — The name of the Azure Service Bus queue or topic to publish messages to.
    - `credentials` AzureServiceBusCredentials, required
      - `connection_string` string, required — The connection string for the Azure Service Bus namespace.
    - `delivery_metadata` object, nullable — Static key-value pairs merged into event metadata on every delivery.
    - `metadata` object, nullable — Arbitrary contextual information stored with the destination.
    - `target` string — A human-readable representation of the destination target (Azure Service Bus queue/topic name). Read-only.
    - `target_url` string, url, nullable — A URL link to the destination target (Azure Portal link to the Service Bus). Read-only.
  - DestinationAWSS3
    - `id` string, required — Control plane generated ID or user provided ID for the destination.
    - `type` 'aws_s3', required — Type of the destination.
    - `topics` union, required — "*" or an array of enabled topics.
      - '*'
      - string[]
    - `filter` Filter, nullable — Optional JSON schema filter for event matching. Events must match this filter to be delivered to this destination. Supports operators: $eq, $neq, $gt, $gte, $lt, $lte, $in, $nin, $startsWith, $endsWith, $exist, $or, $and, $not. If null or empty, all events matching the topic filter will be delivered. To remove an existing filter when updating a destination, set filter to an empty object `{}`.
    - `disabled_at` string, date-time, nullable, required — ISO Date when the destination was disabled, or null if enabled.
    - `created_at` string, date-time, required — ISO Date when the destination was created.
    - `updated_at` string, date-time, required — ISO Date when the destination was last updated.
    - `config` AWSS3Config, required
      - `bucket` string, required — The name of your AWS S3 bucket.
      - `region` string, required — The AWS region where your bucket is located.
      - `key_template` string — JMESPath expression for generating S3 object keys. Default is join('', [time.rfc3339_nano, '_', metadata."event-id", '.json']).
      - `storage_class` string — The storage class for the S3 objects (e.g., STANDARD, INTELLIGENT_TIERING, GLACIER, etc.). Defaults to "STANDARD".
    - `credentials` AWSS3Credentials, required
      - `key` string, required — AWS Access Key ID.
      - `secret` string, required — AWS Secret Access Key.
      - `session` string — Optional AWS Session Token (for temporary credentials).
    - `delivery_metadata` object, nullable — Static key-value pairs merged into event metadata on every delivery.
    - `metadata` object, nullable — Arbitrary contextual information stored with the destination.
    - `target` string — A human-readable representation of the destination target (bucket and region). Read-only.
    - `target_url` string, url, nullable — A URL link to the destination target (AWS Console link to the bucket). Read-only.
  - DestinationGCPPubSub
    - `id` string, required — Control plane generated ID or user provided ID for the destination.
    - `type` 'gcp_pubsub', required — Type of the destination.
    - `topics` union, required — "*" or an array of enabled topics.
      - '*'
      - string[]
    - `filter` Filter, nullable — Optional JSON schema filter for event matching. Events must match this filter to be delivered to this destination. Supports operators: $eq, $neq, $gt, $gte, $lt, $lte, $in, $nin, $startsWith, $endsWith, $exist, $or, $and, $not. If null or empty, all events matching the topic filter will be delivered. To remove an existing filter when updating a destination, set filter to an empty object `{}`.
    - `disabled_at` string, date-time, nullable, required — ISO Date when the destination was disabled, or null if enabled.
    - `created_at` string, date-time, required — ISO Date when the destination was created.
    - `updated_at` string, date-time, required — ISO Date when the destination was last updated.
    - `config` GCPPubSubConfig, required
      - `project_id` string, required — The GCP project ID.
      - `topic` string, required — The Pub/Sub topic name.
      - `endpoint` string — Optional. Custom endpoint URL (e.g., localhost:8085 for emulator).
    - `credentials` GCPPubSubCredentials, required
      - `service_account_json` string, required — Service account key JSON. The entire JSON key file content as a string.
    - `delivery_metadata` object, nullable — Static key-value pairs merged into event metadata on every delivery.
    - `metadata` object, nullable — Arbitrary contextual information stored with the destination.
    - `target` string — A human-readable representation of the destination target (project/topic). Read-only.
    - `target_url` string, url, nullable — A URL link to the destination target (GCP Console link to the topic). Read-only.

## Other responses

- `400` — Invalid request body or configuration.
- `404` — Tenant or Destination not found.

## Changes

- **2025-12-16** `87491060e69d` — 16 info
  - added the new optional request property `oneOf[#/components/schemas/DestinationUpdateAWSKinesis]/filter`
  - added the new optional request property `oneOf[#/components/schemas/DestinationUpdateAWSS3]/filter`
  - added the new optional request property `oneOf[#/components/schemas/DestinationUpdateAWSSQS]/filter`
  - added the new optional request property `oneOf[#/components/schemas/DestinationUpdateAzureServiceBus]/filter`
  - …12 more
- **2025-12-16** `093e15f0f761` — 2 info
  - added the new optional request property `oneOf[#/components/schemas/DestinationUpdateWebhook]/config/custom_headers`
  - added the optional property `oneOf[#/components/schemas/Destination]/oneOf[#/components/schemas/DestinationWebhook]/config/custom_headers` to the response with the `200` status
- …earlier changes not shown

[Full history](https://skmtc.dev/hookdeck/apis/outpost-api/changes/:tenant_id/destinations/:destination_id/patch.md)

---

[API](https://skmtc.dev/hookdeck/apis/outpost-api.md) · [All operations](https://skmtc.dev/hookdeck/apis/outpost-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/hookdeck/outpost-api/revisions/71b1a6e5c824/schema)
