Destinations#

A destination is a configured delivery target — where should matching events go, and how. Destinations are managed independently of the systems producing events.

Authenticated with a management token.

List destinations#

GET /v0/destinations

Paginated.

Response 200

{
  "limit": 25,
  "previous": null,
  "next": null,
  "data": [
    {
      "id": "...",
      "name": "billing-webhook",
      "description": null,
      "destination_type": { "id": "...", "name": "http" },
      "events": [ { "id": "...", "name": "order.placed" } ],
      "config": { "url": "https://example.com/webhook" },
      "status": "active",
      "created_at": "2026-06-19T00:32:58.000+00:00",
      "updated_at": "2026-06-19T00:32:58.000+00:00"
    }
  ]
}

Create a destination#

POST /v0/destinations
Field Rules
name required, string
description nullable, string
destination_type_id required, string — must reference an existing destination type
status required, string — active or disabled
events required, array of { "name": "<event type>" }
config required, object — validated against the destination type’s config_schema

Event types are resolved-or-created by name — pass names, not IDs.

Request

{
  "name": "billing-webhook",
  "destination_type_id": "...",
  "status": "active",
  "events": [ { "name": "order.placed" } ],
  "config": { "url": "https://example.com/webhook" }
}

Response 201 — same shape as an item in the list response above.

Errors: 404 if destination_type_id doesn’t reference an existing destination type, 422 if validation fails (including config failing the destination type’s config_schema).

Get a destination#

GET /v0/destinations/{id}

Response 200 — same shape as an item in the list response. The event subscription set is always embedded — it’s a bounded, config-time concern, not paginated separately.

Errors: 404 if the destination doesn’t exist.

Update a destination#

PATCH /v0/destinations/{id}

Same field rules as create, all fields optional on update except where noted by the destination type’s config_schema.

Response 200 — same shape as GET /v0/destinations/{id}.

Errors: 404, 422.

Delete a destination#

DELETE /v0/destinations/{id}

Response 204 — no body.

Errors: 404.

Replace event subscriptions#

PUT /v0/destinations/{id}/events

Replaces the destination’s full event subscription set.

Field Rules
events required, array of { "name": "<event type>" }

Request

{ "events": [ { "name": "order.placed" }, { "name": "order.cancelled" } ] }

Response 200 — the updated destination, same shape as GET /v0/destinations/{id}.

Errors: 404, 422.

Delivery history#

GET /v0/destinations/{id}/event-logs

Paginated delivery history for this destination — every delivery attempt across every inbound event that matched it. See Event Logs .