---
title: "Create an event destination"
method: POST
path: "/event-destinations"
tags: ["Event Destinations"]
---

# Create an event destination

`POST /event-destinations`

Creates a new event destination (e.g. a webhook endpoint) to receive platform events.

## Request body

- CreateEventDestinationRequest — Request body for creating a new event destination. Provide `name`, `type`, `events`, and exactly one type-specific configuration object whose property name matches `type` (for example `{"type": "webhook", "webhook": {"url": "..."}}`).
  - `name` string, required — Display name for the event destination.
  - `type` 'webhook' | 'aws_sqs' | 'aws_kinesis' | 'aws_s3' | 'aws_eventbridge' | 'gcp_pubsub' | 'rabbitmq' | 'azure_servicebus' | 'hookdeck' — Destination type. Defaults to `webhook` if omitted. Send the matching configuration object under a property whose name equals this value (for example, when `type` is `aws_sqs`, include an `aws_sqs` object).
  - `events` string[], nullable — Event types to subscribe to (for example `task_run.completed`, `credential.verified`). Use `["*"]` to subscribe to all event types; `*` cannot be combined with specific types, and the list must not be empty.
  - `webhook` object — Configuration for a `webhook` destination. Provide this object under the `webhook` property when `type` is `webhook`.
    - `url` string, required — Absolute `https` or `http` URL that receives event deliveries.
    - `secret` string — Signing secret used to verify webhook signatures. Write-only; never returned.
  - `aws_sqs` object — Configuration for a `aws_sqs` destination. Provide this object under the `aws_sqs` property when `type` is `aws_sqs`.
    - `queue_url` string, required — URL of the destination Amazon SQS queue.
    - `key` string — AWS access key ID. Accepted alias: `access_key`. Write-only.
    - `secret` string — AWS secret access key. Accepted alias: `secret_key`. Write-only.
  - `aws_kinesis` object — Configuration for a `aws_kinesis` destination. Provide this object under the `aws_kinesis` property when `type` is `aws_kinesis`.
    - `stream_name` string, required — Name of the Amazon Kinesis stream.
    - `region` string, required — AWS region of the stream.
    - `key` string — AWS access key ID. Accepted alias: `access_key`. Write-only.
    - `secret` string — AWS secret access key. Accepted alias: `secret_key`. Write-only.
  - `aws_s3` object — Configuration for a `aws_s3` destination. Provide this object under the `aws_s3` property when `type` is `aws_s3`.
    - `bucket` string, required — Name of the destination Amazon S3 bucket.
    - `region` string, required — AWS region of the bucket.
    - `key` string — AWS access key ID. Accepted alias: `access_key`. Write-only.
    - `secret` string — AWS secret access key. Accepted alias: `secret_key`. Write-only.
  - `aws_eventbridge` object — Configuration for a `aws_eventbridge` destination. Provide this object under the `aws_eventbridge` property when `type` is `aws_eventbridge`.
    - `event_bus_name` string, required — Name of the Amazon EventBridge event bus.
    - `region` string, required — AWS region of the event bus.
    - `access_key_id` string — AWS access key ID. Write-only.
    - `secret_access_key` string — AWS secret access key. Write-only.
  - `gcp_pubsub` object — Configuration for a `gcp_pubsub` destination. Provide this object under the `gcp_pubsub` property when `type` is `gcp_pubsub`.
    - `project_id` string, required — Google Cloud project ID.
    - `topic` string, required — Pub/Sub topic name. Accepted alias: `topic_name`.
    - `service_account_json` string — Service account credentials JSON. Accepted alias: `credentials_json`. Write-only.
  - `rabbitmq` object — Configuration for a `rabbitmq` destination. Provide this object under the `rabbitmq` property when `type` is `rabbitmq`.
    - `exchange` string, required — Name of the RabbitMQ exchange.
    - `server_url` string, required — RabbitMQ host as `host[:port]` (for example `rabbitmq:5672`). You may instead pass a full AMQP URL with embedded credentials; Deck extracts the host, username, and password from it.
    - `username` string — RabbitMQ username (or embed it in the AMQP `server_url`). Write-only.
    - `password` string — RabbitMQ password (or embed it in the AMQP `server_url`). Write-only.
  - `azure_servicebus` object — Configuration for a `azure_servicebus` destination. Provide this object under the `azure_servicebus` property when `type` is `azure_servicebus`.
    - `name` string, required — Name of the Service Bus queue or topic. Accepted alias: `queue_name`.
    - `connection_string` string — Azure Service Bus connection string. Write-only.
  - `hookdeck` object — Configuration for a `hookdeck` destination. Provide this object under the `hookdeck` property when `type` is `hookdeck`.
    - `token` string — Hookdeck API key. Accepted alias: `api_key`. Write-only.

## Response `201`

Created

- EventDestinationResponse — An event destination object representing an endpoint that receives platform events.
  - `id` string, required — Unique identifier for the event destination, prefixed with `evtd_`.
  - `object` string, required — Always `event_destination`.
  - `name` string, required — Display name for the event destination.
  - `status` string, required — Destination status: `pending_verification`, `active`, or `inactive`.
  - `type` 'webhook' | 'aws_sqs' | 'aws_kinesis' | 'aws_s3' | 'aws_eventbridge' | 'gcp_pubsub' | 'rabbitmq' | 'azure_servicebus' | 'hookdeck', required — Destination type. The endpoint configuration is returned under a property whose name equals this value (for example, a `webhook` destination returns a `webhook` object).
  - `events` string[], required — Event types this destination is subscribed to.
  - `created_at` string, date-time, required — ISO 8601 timestamp of when the resource was created.
  - `updated_at` string, date-time, required — ISO 8601 timestamp of when the resource was last updated.
  - `request_id` string, nullable — Unique identifier for the API request. Include this when contacting support.
  - `webhook` object — Configuration returned for a `webhook` destination (credentials are never returned).
    - `url` string, required — Absolute `https` or `http` URL that receives event deliveries.
  - `aws_sqs` object — Configuration returned for a `aws_sqs` destination (credentials are never returned).
    - `queue_url` string, required — URL of the destination Amazon SQS queue.
  - `aws_kinesis` object — Configuration returned for a `aws_kinesis` destination (credentials are never returned).
    - `stream_name` string, required — Name of the Amazon Kinesis stream.
    - `region` string, required — AWS region of the stream.
  - `aws_s3` object — Configuration returned for a `aws_s3` destination (credentials are never returned).
    - `bucket` string, required — Name of the destination Amazon S3 bucket.
    - `region` string, required — AWS region of the bucket.
  - `aws_eventbridge` object — Configuration returned for a `aws_eventbridge` destination (credentials are never returned).
    - `event_bus_name` string, required — Name of the Amazon EventBridge event bus.
    - `region` string, required — AWS region of the event bus.
  - `gcp_pubsub` object — Configuration returned for a `gcp_pubsub` destination (credentials are never returned).
    - `project_id` string, required — Google Cloud project ID.
    - `topic` string, required — Pub/Sub topic name. Accepted alias: `topic_name`.
  - `rabbitmq` object — Configuration returned for a `rabbitmq` destination (credentials are never returned).
    - `exchange` string, required — Name of the RabbitMQ exchange.
    - `server_url` string, required — RabbitMQ host as `host[:port]` (for example `rabbitmq:5672`). You may instead pass a full AMQP URL with embedded credentials; Deck extracts the host, username, and password from it.
  - `azure_servicebus` object — Configuration returned for a `azure_servicebus` destination (credentials are never returned).
    - `name` string, required — Name of the Service Bus queue or topic. Accepted alias: `queue_name`.
  - `hookdeck` object — Configuration returned for a `hookdeck` destination (credentials are never returned).

## Other responses

- `400` — Bad request — validation error or malformed input.
- `401` — Unauthorized.
- `403` — Forbidden.
- `404` — Not found — the requested resource does not exist.
- `409` — Conflict — the request is valid but cannot be completed in the current state.
- `422` — Unprocessable content — the request body is understood but contains invalid values.
- `429` — Too many requests or session concurrency exceeded. Retry with backoff; honor Retry-After and RateLimit headers when present.
- `500` — Internal server error.

---

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