Events · Schema

Event Subscription

Descriptor for a subscription that consumes events from one or more event sources. Models Kafka consumer groups, Pulsar subscriptions, EventBridge rules, Event Grid event subscriptions, Pub/Sub subscriptions (push and pull), MQTT topic filters, and webhook callbacks.

EventsEvent-DrivenEvent StreamingMessagingPub SubBrokersCloudEventsAsyncAPITopic

Properties

Name Type Description
id string Stable identifier for the subscription within the catalog.
name string Human-readable subscription name.
description string
sourceId string Identifier of the upstream Event Source this subscription consumes from.
deliveryMode string How events reach the consumer. 'push' for webhook-style HTTP POST or Pub/Sub push; 'pull' for poll-and-ack (Kafka consumer, Pub/Sub pull, Event Grid pull); 'stream' for long-lived streaming HTTP/WebSo
deliveryEndpoint string Required for push delivery. The webhook or service URL events are POSTed to.
deliveryHeaders object Static headers added to push deliveries (e.g. signing secrets, authorization tokens). Values SHOULD reference secrets, not contain them.
filter object Filter expression that scopes which events this subscription receives.
retry object Retry policy for failed deliveries.
deadLetter object Where to send events that exhaust the retry policy.
consumerGroup string Kafka/Redpanda consumer-group ID, or Pulsar subscription name.
subscriptionType string Pulsar subscription type. Maps onto similar concepts in other brokers.
ackMode string
qosLevel integer MQTT QoS: 0 at most once, 1 at least once, 2 exactly once.
owner object
tags array
View JSON Schema on GitHub

JSON Schema

events-event-subscription-schema.json Raw ↑
{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://api-evangelist.github.io/events/json-schema/events-event-subscription-schema.json",
  "title": "Event Subscription",
  "description": "Descriptor for a subscription that consumes events from one or more event sources. Models Kafka consumer groups, Pulsar subscriptions, EventBridge rules, Event Grid event subscriptions, Pub/Sub subscriptions (push and pull), MQTT topic filters, and webhook callbacks.",
  "type": "object",
  "required": ["id", "name", "sourceId", "deliveryMode"],
  "properties": {
    "id": {
      "type": "string",
      "minLength": 1,
      "description": "Stable identifier for the subscription within the catalog."
    },
    "name": {
      "type": "string",
      "description": "Human-readable subscription name."
    },
    "description": {
      "type": "string"
    },
    "sourceId": {
      "type": "string",
      "description": "Identifier of the upstream Event Source this subscription consumes from."
    },
    "deliveryMode": {
      "type": "string",
      "enum": ["push", "pull", "stream"],
      "description": "How events reach the consumer. 'push' for webhook-style HTTP POST or Pub/Sub push; 'pull' for poll-and-ack (Kafka consumer, Pub/Sub pull, Event Grid pull); 'stream' for long-lived streaming HTTP/WebSocket."
    },
    "deliveryEndpoint": {
      "type": "string",
      "format": "uri",
      "description": "Required for push delivery. The webhook or service URL events are POSTed to."
    },
    "deliveryHeaders": {
      "type": "object",
      "description": "Static headers added to push deliveries (e.g. signing secrets, authorization tokens). Values SHOULD reference secrets, not contain them."
    },
    "filter": {
      "type": "object",
      "description": "Filter expression that scopes which events this subscription receives.",
      "properties": {
        "language": {
          "type": "string",
          "enum": ["jsonpath", "cel", "event-pattern", "subject-prefix", "regex", "cloudevents-sql"]
        },
        "expression": { "type": "string" }
      }
    },
    "retry": {
      "type": "object",
      "description": "Retry policy for failed deliveries.",
      "properties": {
        "maxAttempts": { "type": "integer", "minimum": 1 },
        "backoff": {
          "type": "string",
          "enum": ["fixed", "linear", "exponential", "exponential-jitter"]
        },
        "initialIntervalSeconds": { "type": "integer", "minimum": 0 },
        "maxIntervalSeconds": { "type": "integer", "minimum": 0 },
        "maxRetentionHours": { "type": "integer", "minimum": 0, "description": "How long the broker keeps trying before giving up. AWS EventBridge defaults to 24 hours." }
      }
    },
    "deadLetter": {
      "type": "object",
      "description": "Where to send events that exhaust the retry policy.",
      "properties": {
        "kind": {
          "type": "string",
          "enum": ["topic", "queue", "url", "none"]
        },
        "target": { "type": "string" }
      }
    },
    "consumerGroup": {
      "type": "string",
      "description": "Kafka/Redpanda consumer-group ID, or Pulsar subscription name."
    },
    "subscriptionType": {
      "type": "string",
      "enum": ["exclusive", "shared", "failover", "key_shared"],
      "description": "Pulsar subscription type. Maps onto similar concepts in other brokers."
    },
    "ackMode": {
      "type": "string",
      "enum": ["auto", "manual", "cumulative"]
    },
    "qosLevel": {
      "type": "integer",
      "minimum": 0,
      "maximum": 2,
      "description": "MQTT QoS: 0 at most once, 1 at least once, 2 exactly once."
    },
    "owner": {
      "type": "object",
      "properties": {
        "team": { "type": "string" },
        "email": { "type": "string", "format": "email" }
      }
    },
    "tags": {
      "type": "array",
      "items": { "type": "string" }
    }
  },
  "additionalProperties": false
}