---
title: "Upsert Destination"
method: PUT
path: "/api/v1/app/{app_id}/destination/{destination_id}"
tags: ["Destination"]
---

# Upsert Destination

`PUT /api/v1/app/{app_id}/destination/{destination_id}`

## Request

- Base URL: `https://api.eu.svix.com`
- URL: `https://api.eu.svix.com/api/v1/app/{app_id}/destination/{destination_id}`
- Auth: HTTP bearer

Create or update a destination.

## Path parameters

- `app_id` string, required: The Application's ID or UID.
- `destination_id` string, required: The Destination's ID or UID.

## Request body

- union: The destination's type and type-specific configuration.
  - object
    - `batchSize` integer: How many events will be batched in a request to the destination.
    - `channels` string[]: A list of channels that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `eventTypes` string[]: A list of event types that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `maxWaitSecs` integer: How long to wait before a batch of events is sent, if the `batchSize` is not reached. For example, with a `batchSize` of 100 and `maxWaitSecs` of 10, a request is sent after 10 seconds or 100 events, whichever comes first. Note that an empty batch is never sent to the destination.
    - `metadata` object
    - `status` 'enabled' | 'disabled'
    - `uid` string, nullable: An optional unique identifier for the destination.
    - `type` 'pollingEndpoint', required
  - object
    - `batchSize` integer: How many events will be batched in a request to the destination.
    - `channels` string[]: A list of channels that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `eventTypes` string[]: A list of event types that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `maxWaitSecs` integer: How long to wait before a batch of events is sent, if the `batchSize` is not reached. For example, with a `batchSize` of 100 and `maxWaitSecs` of 10, a request is sent after 10 seconds or 100 events, whichever comes first. Note that an empty batch is never sent to the destination.
    - `metadata` object
    - `status` 'enabled' | 'disabled'
    - `uid` string, nullable: An optional unique identifier for the destination.
    - `config` AzureBlobStorageConfigIn, required
      - `accessKey` string, nullable: Access key. Currently a required field, but marked as optional because we may add different authentication in the future.
      - `account` string, required
      - `container` string, required
    - `type` 'azureBlobStorage', required
  - object
    - `batchSize` integer: How many events will be batched in a request to the destination.
    - `channels` string[]: A list of channels that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `eventTypes` string[]: A list of event types that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `maxWaitSecs` integer: How long to wait before a batch of events is sent, if the `batchSize` is not reached. For example, with a `batchSize` of 100 and `maxWaitSecs` of 10, a request is sent after 10 seconds or 100 events, whichever comes first. Note that an empty batch is never sent to the destination.
    - `metadata` object
    - `status` 'enabled' | 'disabled'
    - `uid` string, nullable: An optional unique identifier for the destination.
    - `config` OtelTracingConfigIn, required
      - `headers` object
      - `url` string, uri, required
    - `type` 'otelTracing', required
  - object
    - `batchSize` integer: How many events will be batched in a request to the destination.
    - `channels` string[]: A list of channels that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `eventTypes` string[]: A list of event types that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `maxWaitSecs` integer: How long to wait before a batch of events is sent, if the `batchSize` is not reached. For example, with a `batchSize` of 100 and `maxWaitSecs` of 10, a request is sent after 10 seconds or 100 events, whichever comes first. Note that an empty batch is never sent to the destination.
    - `metadata` object
    - `status` 'enabled' | 'disabled'
    - `uid` string, nullable: An optional unique identifier for the destination.
    - `config` FifoEndpointConfigIn, required
      - `headers` object
      - `key` string, nullable
      - `url` string, uri, required
    - `type` 'fifoEndpoint', required
  - object
    - `batchSize` integer: How many events will be batched in a request to the destination.
    - `channels` string[]: A list of channels that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `eventTypes` string[]: A list of event types that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `maxWaitSecs` integer: How long to wait before a batch of events is sent, if the `batchSize` is not reached. For example, with a `batchSize` of 100 and `maxWaitSecs` of 10, a request is sent after 10 seconds or 100 events, whichever comes first. Note that an empty batch is never sent to the destination.
    - `metadata` object
    - `status` 'enabled' | 'disabled'
    - `uid` string, nullable: An optional unique identifier for the destination.
    - `config` S3ConfigIn, required
      - `accessKeyId` string, nullable: Access key ID. Required (along with `secret_access_key`) if `role_arn` is null
      - `bucket` string, required
      - `endpointUrl` string, uri, nullable
      - `externalId` string, nullable: Shared secret passed as the STS ExternalId. Recommended if `role_arn` is not null.
      - `region` string, nullable: The region of the S3 bucket Currently a required field, but marked as optional because we may infer it from other fields in the future.
      - `roleArn` string, nullable: Role ARN for delegated authentication
      - `secretAccessKey` string, nullable: Secret access key. Required (along with `access_key_id`) if `role_arn` is null
    - `type` 'amazonS3', required
  - object
    - `batchSize` integer: How many events will be batched in a request to the destination.
    - `channels` string[]: A list of channels that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `eventTypes` string[]: A list of event types that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `maxWaitSecs` integer: How long to wait before a batch of events is sent, if the `batchSize` is not reached. For example, with a `batchSize` of 100 and `maxWaitSecs` of 10, a request is sent after 10 seconds or 100 events, whichever comes first. Note that an empty batch is never sent to the destination.
    - `metadata` object
    - `status` 'enabled' | 'disabled'
    - `uid` string, nullable: An optional unique identifier for the destination.
    - `config` GoogleCloudStorageConfigIn, required: Configuration for a Google Cloud Storage sink. Write stream events into the named bucket using the supplied Google Cloud credentials.
      - `bucket` string, required
      - `credentials` string, required: Google Cloud Credentials JSON Object as a string.
    - `type` 'googleCloudStorage', required
  - object
    - `batchSize` integer: How many events will be batched in a request to the destination.
    - `channels` string[]: A list of channels that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `eventTypes` string[]: A list of event types that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `maxWaitSecs` integer: How long to wait before a batch of events is sent, if the `batchSize` is not reached. For example, with a `batchSize` of 100 and `maxWaitSecs` of 10, a request is sent after 10 seconds or 100 events, whichever comes first. Note that an empty batch is never sent to the destination.
    - `metadata` object
    - `status` 'enabled' | 'disabled'
    - `uid` string, nullable: An optional unique identifier for the destination.
    - `config` GoogleCloudPubSubConfigIn, required
      - `credentials` string, required: Google Cloud Credentials JSON Object as a string.
      - `projectId` string, required
      - `topicId` string, required
    - `type` 'googleCloudPubSub', required
  - object
    - `batchSize` integer: How many events will be batched in a request to the destination.
    - `channels` string[]: A list of channels that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `eventTypes` string[]: A list of event types that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `maxWaitSecs` integer: How long to wait before a batch of events is sent, if the `batchSize` is not reached. For example, with a `batchSize` of 100 and `maxWaitSecs` of 10, a request is sent after 10 seconds or 100 events, whichever comes first. Note that an empty batch is never sent to the destination.
    - `metadata` object
    - `status` 'enabled' | 'disabled'
    - `uid` string, nullable: An optional unique identifier for the destination.
    - `config` SqsConfigIn, required: Configuration for an SQS sink.
      - `accessKeyId` string, nullable: Access key ID. Required (along with `secret_access_key`) if `role_arn` is blank.
      - `endpointUrl` string, uri, nullable
      - `externalId` string, nullable: Shared secret passed as the STS ExternalId. Can only be set if `role_arn` is Some
      - `queueUrl` string, uri, required
      - `region` string, nullable: The region of the SQS queue. Currently a required field, but marked as optional because we may infer it from other fields in the future.
      - `roleArn` string, nullable: Role ARN for delegated authentication
      - `secretAccessKey` string, nullable: Secret access key. Required (along with `access_key_id`) if `role_arn` is blank.
    - `type` 'sqs', required
  - object
    - `batchSize` integer: How many events will be batched in a request to the destination.
    - `channels` string[]: A list of channels that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `eventTypes` string[]: A list of event types that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `maxWaitSecs` integer: How long to wait before a batch of events is sent, if the `batchSize` is not reached. For example, with a `batchSize` of 100 and `maxWaitSecs` of 10, a request is sent after 10 seconds or 100 events, whichever comes first. Note that an empty batch is never sent to the destination.
    - `metadata` object
    - `status` 'enabled' | 'disabled'
    - `uid` string, nullable: An optional unique identifier for the destination.
    - `config` SnsConfigIn, required: Configuration for a SNS sink.
      - `accessKeyId` string, nullable: Access key ID. Required (along with `secret_access_key`) if `role_arn` is None
      - `endpointUrl` string, uri, nullable
      - `externalId` string, nullable: Shared secret passed as the STS ExternalId. Can only be set if `role_arn` is Some
      - `region` string, nullable: The region of the SNS instance. Currently a required field, but marked as optional because we may infer it from other fields in the future.
      - `roleArn` string, nullable: Role ARN for delegated authentication
      - `secretAccessKey` string, nullable: Secret access key. Required (along with `access_key_id`) if `role_arn` is None
      - `topicArn` string, required
    - `type` 'sns', required
  - object
    - `batchSize` integer: How many events will be batched in a request to the destination.
    - `channels` string[]: A list of channels that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `eventTypes` string[]: A list of event types that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `maxWaitSecs` integer: How long to wait before a batch of events is sent, if the `batchSize` is not reached. For example, with a `batchSize` of 100 and `maxWaitSecs` of 10, a request is sent after 10 seconds or 100 events, whichever comes first. Note that an empty batch is never sent to the destination.
    - `metadata` object
    - `status` 'enabled' | 'disabled'
    - `uid` string, nullable: An optional unique identifier for the destination.
    - `config` BigQueryConfigIn, required: Configuration for a Google Cloud BigQuery sink.
      - `credentials` string, required: Google Cloud Credentials JSON Object as a string.
      - `datasetId` string, required
      - `projectId` string, required
      - `tableId` string, required
    - `type` 'bigQuery', required
  - object
    - `batchSize` integer: How many events will be batched in a request to the destination.
    - `channels` string[]: A list of channels that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `eventTypes` string[]: A list of event types that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `maxWaitSecs` integer: How long to wait before a batch of events is sent, if the `batchSize` is not reached. For example, with a `batchSize` of 100 and `maxWaitSecs` of 10, a request is sent after 10 seconds or 100 events, whichever comes first. Note that an empty batch is never sent to the destination.
    - `metadata` object
    - `status` 'enabled' | 'disabled'
    - `uid` string, nullable: An optional unique identifier for the destination.
    - `config` ClickhouseConfigIn, required
      - `database` string: The Clickhouse database to connect to.
      - `password` string, nullable: Password to access Clickhouse. Currently a required field, but marked as optional because we may add different authentication in the future.
      - `tableName` string, required: The Clickhouse table to write to.
      - `url` string, uri, required: The HTTP URL of the ClickHouse server (e.g. `https://my_clickhouse:8443`).
      - `username` string, nullable: Username to access Clickhouse. Currently a required field, but marked as optional because we may add different authentication in the future.
    - `type` 'clickhouse', required
  - object
    - `batchSize` integer: How many events will be batched in a request to the destination.
    - `channels` string[]: A list of channels that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `eventTypes` string[]: A list of event types that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `maxWaitSecs` integer: How long to wait before a batch of events is sent, if the `batchSize` is not reached. For example, with a `batchSize` of 100 and `maxWaitSecs` of 10, a request is sent after 10 seconds or 100 events, whichever comes first. Note that an empty batch is never sent to the destination.
    - `metadata` object
    - `status` 'enabled' | 'disabled'
    - `uid` string, nullable: An optional unique identifier for the destination.
    - `config` EventBridgeConfigIn, required
      - `accessKeyId` string, nullable: Access key ID. Required (along with `secret_access_key`) if `role_arn` is blank.
      - `detailType` string: Free-form string, with a maximum of 128 characters
      - `eventBusName` string, required: The name or ARN of the event bus to receive the event
      - `externalId` string, nullable: Shared secret passed as the STS ExternalId. Can only be set if `role_arn` is Some
      - `region` string, nullable: The region of the EventBridge bus. Currently a required field, but marked as optional because we may infer it from other fields in the future.
      - `roleArn` string, nullable: Role ARN for delegated authentication
      - `secretAccessKey` string, nullable: Secret access key. Required (along with `access_key_id`) if `role_arn` is blank.
    - `type` 'eventBridge', required
  - object
    - `batchSize` integer: How many events will be batched in a request to the destination.
    - `channels` string[]: A list of channels that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `eventTypes` string[]: A list of event types that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `maxWaitSecs` integer: How long to wait before a batch of events is sent, if the `batchSize` is not reached. For example, with a `batchSize` of 100 and `maxWaitSecs` of 10, a request is sent after 10 seconds or 100 events, whichever comes first. Note that an empty batch is never sent to the destination.
    - `metadata` object
    - `status` 'enabled' | 'disabled'
    - `uid` string, nullable: An optional unique identifier for the destination.
    - `config` SnowflakeConfigIn, required: Configuration parameters for defining a Snowflake sink.
      - `accountIdentifier` string, required: Snowflake account identifier, which includes both the organization and account IDs separated by a hyphen.
      - `dbName` string: Database name. Only required if not using transformations.
      - `privateKey` string, nullable: PEM-encoded private key used for signing token-based requests to the Snowflake API. Beginning/end delimiters are not required. Currently a required field, but marked as optional because we may add different authentication in the future.
      - `schemaName` string: Schema name. Only required if not using transformations.
      - `tableName` string: Table name. Only required if not using transformations.
      - `userId` string, required: The Snowflake user id.
    - `type` 'snowflake', required
  - object
    - `batchSize` integer: How many events will be batched in a request to the destination.
    - `channels` string[]: A list of channels that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `eventTypes` string[]: A list of event types that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `maxWaitSecs` integer: How long to wait before a batch of events is sent, if the `batchSize` is not reached. For example, with a `batchSize` of 100 and `maxWaitSecs` of 10, a request is sent after 10 seconds or 100 events, whichever comes first. Note that an empty batch is never sent to the destination.
    - `metadata` object
    - `status` 'enabled' | 'disabled'
    - `uid` string, nullable: An optional unique identifier for the destination.
    - `config` RabbitMqConfigIn, required: Configuration for a RabbitMq sink.
      - `mandatory` boolean: If true, then dispatches will fail if there is no attached queue; if false, they are silently dropped (this was previously the default)
      - `routingKey` string, required: Routing key for message dispatch
      - `uri` string, required: URI to connect to Note that the VHost must be percent-escaped, so a default URI would look like `amqp://user:pass@host/%2F`
    - `type` 'rabbitMq', required
  - object
    - `batchSize` integer: How many events will be batched in a request to the destination.
    - `channels` string[]: A list of channels that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `eventTypes` string[]: A list of event types that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `maxWaitSecs` integer: How long to wait before a batch of events is sent, if the `batchSize` is not reached. For example, with a `batchSize` of 100 and `maxWaitSecs` of 10, a request is sent after 10 seconds or 100 events, whichever comes first. Note that an empty batch is never sent to the destination.
    - `metadata` object
    - `status` 'enabled' | 'disabled'
    - `uid` string, nullable: An optional unique identifier for the destination.
    - `config` RedshiftConfigIn, required: Configuration parameters for defining a Redshift sink. For provisioned clusters, set `cluster_identifier` and `db_user`. For Redshift Serverless, set `workgroup_name`.
      - `accessKeyId` string, nullable: Access key ID. Required (along with `secret_access_key`) if `role_arn` is blank.
      - `clusterIdentifier` string, nullable: Required for provisioned clusters.
      - `dbName` string: Database name. Only required if not using transformations.
      - `dbUser` string, nullable: Required for provisioned clusters.
      - `externalId` string, nullable: Shared secret passed as the STS ExternalId. Can only be set if `role_arn` is Some
      - `region` string, nullable: The region of the Redshift DB. Currently a required field, but marked as optional because we may infer it from other fields in the future.
      - `roleArn` string, nullable: Role ARN for delegated authentication
      - `schemaName` string, nullable: Schema name. Only used if not using transformations.
      - `secretAccessKey` string, nullable: Secret access key. Required (along with `access_key_id`) if `role_arn` is blank.
      - `tableName` string: Table name. Only required if not using transformations.
      - `workgroupName` string, nullable: Required for Redshift Serverless.
    - `type` 'redshift', required
  - object
    - `batchSize` integer: How many events will be batched in a request to the destination.
    - `channels` string[]: A list of channels that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `eventTypes` string[]: A list of event types that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `maxWaitSecs` integer: How long to wait before a batch of events is sent, if the `batchSize` is not reached. For example, with a `batchSize` of 100 and `maxWaitSecs` of 10, a request is sent after 10 seconds or 100 events, whichever comes first. Note that an empty batch is never sent to the destination.
    - `metadata` object
    - `status` 'enabled' | 'disabled'
    - `uid` string, nullable: An optional unique identifier for the destination.
    - `config` PostgresConfigIn, required
      - `password` string, nullable: Password for the connection.
      - `sslRootCert` string, nullable: PEM-encoded CA certificate used to verify the Postgres server's TLS certificate. Supply this to trust a private or self-signed CA when connecting with `sslmode=verify-ca` or `sslmode=verify-full`. Without it, only the built-in public roots are trusted.
      - `tableName` string, required: Table to insert into. May be schema-qualified (e.g. `public.events`). Quote characters are not supported. Each dot-separated segment is automatically double-quoted when the query is built, so `public.events` becomes `"public"."events"`.
      - `url` string, required: PostgreSQL connection URL, e.g. `postgres://user@host:5432/dbname?sslmode=require`. Do NOT embed a password here; use the `password` field instead.
    - `type` 'postgres', required
  - object
    - `batchSize` integer: How many events will be batched in a request to the destination.
    - `channels` string[]: A list of channels that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `eventTypes` string[]: A list of event types that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `maxWaitSecs` integer: How long to wait before a batch of events is sent, if the `batchSize` is not reached. For example, with a `batchSize` of 100 and `maxWaitSecs` of 10, a request is sent after 10 seconds or 100 events, whichever comes first. Note that an empty batch is never sent to the destination.
    - `metadata` object
    - `status` 'enabled' | 'disabled'
    - `uid` string, nullable: An optional unique identifier for the destination.
    - `config` ElasticSearchConfigIn, required: Configuration parameters for defining an ElasticSearch/OpenSearch sink.
      - `apiKey` string, nullable: API key for authentication for ElasticSearch If not passed, any username:password embedded in the URL will be used. If none is passed, the indexing will be done unauthenticated.
      - `indexName` string, required: Name of the index to write to This can also be a data stream on sufficiently-new versions of ElasticSearch/OpenSearch
      - `operation` 'index' | 'create': Operation for bulk indexing. `index` will do an upsert for the given document ID, and `create` will insert it (and do nothing on conflict). Only `create` is supported for Data Stream targets.
      - `refresh` boolean: If true, Elasticsearch refreshes the affected shards to make this operation visible to search.
      - `url` string, uri, required: Base URL to send indexing requests This should not include the /{index}/_bulk suffix.
    - `type` 'elasticSearch', required
  - object
    - `batchSize` integer: How many events will be batched in a request to the destination.
    - `channels` string[]: A list of channels that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `eventTypes` string[]: A list of event types that filter which events are dispatched to the destination. An empty list (or null) will not filter out any events.
    - `maxWaitSecs` integer: How long to wait before a batch of events is sent, if the `batchSize` is not reached. For example, with a `batchSize` of 100 and `maxWaitSecs` of 10, a request is sent after 10 seconds or 100 events, whichever comes first. Note that an empty batch is never sent to the destination.
    - `metadata` object
    - `status` 'enabled' | 'disabled'
    - `uid` string, nullable: An optional unique identifier for the destination.
    - `config` PostHogConfigIn, required: Configuration parameters for defining a PostHog sink.
      - `domain` string, uri, required: The PostHog ingestion domain. This is https://us.i.posthog.com for US Cloud, https://eu.i.posthog.com for EU Cloud, and your self-hosted domain for self-hosted instances. Note the `.i.` in the Cloud hosts (`us.posthog.com` and `eu.posthog.com` are different, private endpoints).
      - `projectToken` string, required: The PostHog project API key. Sent as the `api_key` field in the body of each `/batch/` request.
    - `type` 'postHog', required

## Response `200`

- union
  - object
    - `batchSize` integer, required
    - `channels` string[]
    - `createdAt` string, date-time, required
    - `currentIterator` string, required
    - `eventTypes` string[]
    - `failureReason` string, nullable
    - `id` string, required: The Destination's ID.
    - `maxWaitSecs` integer, required
    - `metadata` object, required
    - `nextRetryAt` string, date-time, nullable
    - `status` 'enabled' | 'paused' | 'disabled' | 'retrying', required
    - `uid` string, nullable: The Destination's UID.
    - `updatedAt` string, date-time, required
    - `type` 'pollingEndpoint', required
  - object
    - `batchSize` integer, required
    - `channels` string[]
    - `createdAt` string, date-time, required
    - `currentIterator` string, required
    - `eventTypes` string[]
    - `failureReason` string, nullable
    - `id` string, required: The Destination's ID.
    - `maxWaitSecs` integer, required
    - `metadata` object, required
    - `nextRetryAt` string, date-time, nullable
    - `status` 'enabled' | 'paused' | 'disabled' | 'retrying', required
    - `uid` string, nullable: The Destination's UID.
    - `updatedAt` string, date-time, required
    - `config` AzureBlobStorageConfigOut, required
      - `account` string, required
      - `container` string, required
    - `type` 'azureBlobStorage', required
  - object
    - `batchSize` integer, required
    - `channels` string[]
    - `createdAt` string, date-time, required
    - `currentIterator` string, required
    - `eventTypes` string[]
    - `failureReason` string, nullable
    - `id` string, required: The Destination's ID.
    - `maxWaitSecs` integer, required
    - `metadata` object, required
    - `nextRetryAt` string, date-time, nullable
    - `status` 'enabled' | 'paused' | 'disabled' | 'retrying', required
    - `uid` string, nullable: The Destination's UID.
    - `updatedAt` string, date-time, required
    - `config` OtelTracingConfigOut, required
      - `headers` EndpointHeadersOut, required: The value of the headers is returned in the `headers` field. Sensitive headers that have been redacted are returned in the sensitive field.
        - `headers` object, required
        - `sensitive` string[], required
      - `url` string, uri, required
    - `type` 'otelTracing', required
  - object
    - `batchSize` integer, required
    - `channels` string[]
    - `createdAt` string, date-time, required
    - `currentIterator` string, required
    - `eventTypes` string[]
    - `failureReason` string, nullable
    - `id` string, required: The Destination's ID.
    - `maxWaitSecs` integer, required
    - `metadata` object, required
    - `nextRetryAt` string, date-time, nullable
    - `status` 'enabled' | 'paused' | 'disabled' | 'retrying', required
    - `uid` string, nullable: The Destination's UID.
    - `updatedAt` string, date-time, required
    - `config` SinkHttpConfigOut, required
      - `headers` EndpointHeadersOut, required: The value of the headers is returned in the `headers` field. Sensitive headers that have been redacted are returned in the sensitive field.
        - `headers` object, required
        - `sensitive` string[], required
      - `url` string, uri, required
    - `type` 'fifoEndpoint', required
  - object
    - `batchSize` integer, required
    - `channels` string[]
    - `createdAt` string, date-time, required
    - `currentIterator` string, required
    - `eventTypes` string[]
    - `failureReason` string, nullable
    - `id` string, required: The Destination's ID.
    - `maxWaitSecs` integer, required
    - `metadata` object, required
    - `nextRetryAt` string, date-time, nullable
    - `status` 'enabled' | 'paused' | 'disabled' | 'retrying', required
    - `uid` string, nullable: The Destination's UID.
    - `updatedAt` string, date-time, required
    - `config` S3ConfigOut, required
      - `accessKeyId` string, nullable
      - `bucket` string, required
      - `endpointUrl` string, uri, nullable
      - `externalId` string, nullable
      - `region` string, required
      - `roleArn` string, nullable
    - `type` 'amazonS3', required
  - object
    - `batchSize` integer, required
    - `channels` string[]
    - `createdAt` string, date-time, required
    - `currentIterator` string, required
    - `eventTypes` string[]
    - `failureReason` string, nullable
    - `id` string, required: The Destination's ID.
    - `maxWaitSecs` integer, required
    - `metadata` object, required
    - `nextRetryAt` string, date-time, nullable
    - `status` 'enabled' | 'paused' | 'disabled' | 'retrying', required
    - `uid` string, nullable: The Destination's UID.
    - `updatedAt` string, date-time, required
    - `config` SnowflakeConfigOut, required
      - `accountIdentifier` string, required
      - `dbName` string: Database name. Only required if not using transformations.
      - `schemaName` string: Schema name. Only required if not using transformations.
      - `tableName` string: Table name. Only required if not using transformations.
      - `userId` string, required
    - `type` 'snowflake', required
  - object
    - `batchSize` integer, required
    - `channels` string[]
    - `createdAt` string, date-time, required
    - `currentIterator` string, required
    - `eventTypes` string[]
    - `failureReason` string, nullable
    - `id` string, required: The Destination's ID.
    - `maxWaitSecs` integer, required
    - `metadata` object, required
    - `nextRetryAt` string, date-time, nullable
    - `status` 'enabled' | 'paused' | 'disabled' | 'retrying', required
    - `uid` string, nullable: The Destination's UID.
    - `updatedAt` string, date-time, required
    - `config` GoogleCloudStorageConfigOut, required
      - `bucket` string, required
    - `type` 'googleCloudStorage', required
  - object
    - `batchSize` integer, required
    - `channels` string[]
    - `createdAt` string, date-time, required
    - `currentIterator` string, required
    - `eventTypes` string[]
    - `failureReason` string, nullable
    - `id` string, required: The Destination's ID.
    - `maxWaitSecs` integer, required
    - `metadata` object, required
    - `nextRetryAt` string, date-time, nullable
    - `status` 'enabled' | 'paused' | 'disabled' | 'retrying', required
    - `uid` string, nullable: The Destination's UID.
    - `updatedAt` string, date-time, required
    - `config` GoogleCloudPubSubConfigOut, required
      - `projectId` string, required
      - `topicId` string, required
    - `type` 'googleCloudPubSub', required
  - object
    - `batchSize` integer, required
    - `channels` string[]
    - `createdAt` string, date-time, required
    - `currentIterator` string, required
    - `eventTypes` string[]
    - `failureReason` string, nullable
    - `id` string, required: The Destination's ID.
    - `maxWaitSecs` integer, required
    - `metadata` object, required
    - `nextRetryAt` string, date-time, nullable
    - `status` 'enabled' | 'paused' | 'disabled' | 'retrying', required
    - `uid` string, nullable: The Destination's UID.
    - `updatedAt` string, date-time, required
    - `config` RedshiftConfigOut, required
      - `accessKeyId` string, nullable
      - `clusterIdentifier` string, nullable
      - `dbName` string: Database name. Only required if not using transformations.
      - `dbUser` string, nullable
      - `externalId` string, nullable
      - `region` string, required
      - `roleArn` string, nullable
      - `schemaName` string, nullable: Schema name. Only used if not using transformations.
      - `tableName` string: Table name. Only required if not using transformations.
      - `workgroupName` string, nullable
    - `type` 'redshift', required
  - object
    - `batchSize` integer, required
    - `channels` string[]
    - `createdAt` string, date-time, required
    - `currentIterator` string, required
    - `eventTypes` string[]
    - `failureReason` string, nullable
    - `id` string, required: The Destination's ID.
    - `maxWaitSecs` integer, required
    - `metadata` object, required
    - `nextRetryAt` string, date-time, nullable
    - `status` 'enabled' | 'paused' | 'disabled' | 'retrying', required
    - `uid` string, nullable: The Destination's UID.
    - `updatedAt` string, date-time, required
    - `config` BigQueryConfigOut, required
      - `datasetId` string, required
      - `projectId` string, required
      - `tableId` string, required
    - `type` 'bigQuery', required
  - object
    - `batchSize` integer, required
    - `channels` string[]
    - `createdAt` string, date-time, required
    - `currentIterator` string, required
    - `eventTypes` string[]
    - `failureReason` string, nullable
    - `id` string, required: The Destination's ID.
    - `maxWaitSecs` integer, required
    - `metadata` object, required
    - `nextRetryAt` string, date-time, nullable
    - `status` 'enabled' | 'paused' | 'disabled' | 'retrying', required
    - `uid` string, nullable: The Destination's UID.
    - `updatedAt` string, date-time, required
    - `config` ClickhouseConfigOut, required
      - `database` string, required
      - `tableName` string, required
      - `url` string, uri, required
      - `username` string, required
    - `type` 'clickhouse', required
  - object
    - `batchSize` integer, required
    - `channels` string[]
    - `createdAt` string, date-time, required
    - `currentIterator` string, required
    - `eventTypes` string[]
    - `failureReason` string, nullable
    - `id` string, required: The Destination's ID.
    - `maxWaitSecs` integer, required
    - `metadata` object, required
    - `nextRetryAt` string, date-time, nullable
    - `status` 'enabled' | 'paused' | 'disabled' | 'retrying', required
    - `uid` string, nullable: The Destination's UID.
    - `updatedAt` string, date-time, required
    - `config` RabbitMqConfigOut, required
      - `mandatory` boolean, required
      - `routingKey` string, required
      - `uri` string, required
    - `type` 'rabbitMq', required
  - object
    - `batchSize` integer, required
    - `channels` string[]
    - `createdAt` string, date-time, required
    - `currentIterator` string, required
    - `eventTypes` string[]
    - `failureReason` string, nullable
    - `id` string, required: The Destination's ID.
    - `maxWaitSecs` integer, required
    - `metadata` object, required
    - `nextRetryAt` string, date-time, nullable
    - `status` 'enabled' | 'paused' | 'disabled' | 'retrying', required
    - `uid` string, nullable: The Destination's UID.
    - `updatedAt` string, date-time, required
    - `config` SqsConfigOut, required
      - `accessKeyId` string, nullable
      - `endpointUrl` string, uri, nullable
      - `externalId` string, nullable
      - `queueUrl` string, uri, required
      - `region` string, required
      - `roleArn` string, nullable
    - `type` 'sqs', required
  - object
    - `batchSize` integer, required
    - `channels` string[]
    - `createdAt` string, date-time, required
    - `currentIterator` string, required
    - `eventTypes` string[]
    - `failureReason` string, nullable
    - `id` string, required: The Destination's ID.
    - `maxWaitSecs` integer, required
    - `metadata` object, required
    - `nextRetryAt` string, date-time, nullable
    - `status` 'enabled' | 'paused' | 'disabled' | 'retrying', required
    - `uid` string, nullable: The Destination's UID.
    - `updatedAt` string, date-time, required
    - `config` EventBridgeConfigOut, required
      - `accessKeyId` string, nullable
      - `detailType` string, required
      - `eventBusName` string, required
      - `externalId` string, nullable
      - `region` string, required
      - `roleArn` string, nullable
    - `type` 'eventBridge', required
  - object
    - `batchSize` integer, required
    - `channels` string[]
    - `createdAt` string, date-time, required
    - `currentIterator` string, required
    - `eventTypes` string[]
    - `failureReason` string, nullable
    - `id` string, required: The Destination's ID.
    - `maxWaitSecs` integer, required
    - `metadata` object, required
    - `nextRetryAt` string, date-time, nullable
    - `status` 'enabled' | 'paused' | 'disabled' | 'retrying', required
    - `uid` string, nullable: The Destination's UID.
    - `updatedAt` string, date-time, required
    - `config` SnsConfigOut, required
      - `accessKeyId` string, nullable
      - `externalId` string, nullable
      - `region` string, required
      - `roleArn` string, nullable
      - `topicArn` string, required
    - `type` 'sns', required
  - object
    - `batchSize` integer, required
    - `channels` string[]
    - `createdAt` string, date-time, required
    - `currentIterator` string, required
    - `eventTypes` string[]
    - `failureReason` string, nullable
    - `id` string, required: The Destination's ID.
    - `maxWaitSecs` integer, required
    - `metadata` object, required
    - `nextRetryAt` string, date-time, nullable
    - `status` 'enabled' | 'paused' | 'disabled' | 'retrying', required
    - `uid` string, nullable: The Destination's UID.
    - `updatedAt` string, date-time, required
    - `config` PostgresConfigOut, required
      - `sslRootCert` string, nullable
      - `tableName` string, required
      - `url` string, required
    - `type` 'postgres', required
  - object
    - `batchSize` integer, required
    - `channels` string[]
    - `createdAt` string, date-time, required
    - `currentIterator` string, required
    - `eventTypes` string[]
    - `failureReason` string, nullable
    - `id` string, required: The Destination's ID.
    - `maxWaitSecs` integer, required
    - `metadata` object, required
    - `nextRetryAt` string, date-time, nullable
    - `status` 'enabled' | 'paused' | 'disabled' | 'retrying', required
    - `uid` string, nullable: The Destination's UID.
    - `updatedAt` string, date-time, required
    - `config` ElasticSearchConfigOut, required
      - `indexName` string, required
      - `operation` 'index' | 'create', required: Operation for bulk indexing. `index` will do an upsert for the given document ID, and `create` will insert it (and do nothing on conflict). Only `create` is supported for Data Stream targets.
      - `refresh` boolean, required
      - `url` string, uri, required
    - `type` 'elasticSearch', required
  - object
    - `batchSize` integer, required
    - `channels` string[]
    - `createdAt` string, date-time, required
    - `currentIterator` string, required
    - `eventTypes` string[]
    - `failureReason` string, nullable
    - `id` string, required: The Destination's ID.
    - `maxWaitSecs` integer, required
    - `metadata` object, required
    - `nextRetryAt` string, date-time, nullable
    - `status` 'enabled' | 'paused' | 'disabled' | 'retrying', required
    - `uid` string, nullable: The Destination's UID.
    - `updatedAt` string, date-time, required
    - `config` PostHogConfigOut, required
      - `domain` string, uri, required
    - `type` 'postHog', required

## Other responses

- `201`
- `400`: Bad request
- `401`: Unauthorized
- `403`: Forbidden
- `404`: Not Found
- `409`: Conflict
- `422`: Validation Error
- `429`: Too Many Requests

## Changes

- **2026-10-28** `21bb0f86a732`: 1 warning
  - the `oneOf[#/components/schemas/DestinationIn_fifoEndpoint]/config/key` request property's maxLength was set to `512`
- **2026-10-26** `77555fa3a659`: 2 breaking, 4 info
  - added `#/components/schemas/DestinationOut_postHog` to the response body `oneOf` list for the response status `200`
  - added `#/components/schemas/DestinationOut_postHog` to the response body `oneOf` list for the response status `201`
  - added `postHog` mapping keys to the request discriminator
  - added `#/components/schemas/DestinationIn_postHog` to the request body `oneOf` list
  - …2 more
- **2026-10-21** `36b59828b304`: 3 breaking, 4 info
  - the `oneOf[#/components/schemas/DestinationIn_redshift]/config/region` request property's maxLength was decreased to `16`
  - the `oneOf[#/components/schemas/DestinationIn_sns]/config/region` request property's maxLength was decreased to `16`
  - the `oneOf[#/components/schemas/DestinationIn_sqs]/config/region` request property's maxLength was decreased to `16`
  - the `oneOf[#/components/schemas/DestinationIn_googleCloudPubSub]/config/credentials` request property's maxLength was increased from `512` to `65536`
  - …3 more
- **2026-10-19** `cca56e67e5a4`: 1 info
  - added the required property `code` to the response with the `422` status
- …earlier changes not shown

[Operation history](https://skmtc.dev/svix/apis/svix-api/changes/api/v1/app/:app_id/destination/:destination_id/put.md)

---

[API](https://skmtc.dev/svix/apis/svix-api.md) - [All operations](https://skmtc.dev/svix/apis/svix-api/llms.txt) - [OpenAPI document](https://skmtc.dev/svix/apis/svix-api/revisions/21bb0f86a732?raw)
