{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://keda.sh/schemas/keda/cloud-event.json", "title": "KEDA CloudEvent", "description": "Schema for CloudEvents emitted by KEDA when scaling-related events occur. Events follow the CloudEvents specification v1.0 and are delivered to HTTP or Azure Event Grid destinations configured in a CloudEventSource or ClusterCloudEventSource resource.", "type": "object", "required": ["specversion", "type", "source", "subject", "id", "time", "datacontenttype", "data"], "properties": { "specversion": { "type": "string", "const": "1.0", "description": "CloudEvents specification version. Always 1.0 for KEDA events." }, "type": { "type": "string", "const": "com.cloudeventsource.keda", "description": "CloudEvent type identifier. Always com.cloudeventsource.keda for events emitted by KEDA." }, "source": { "type": "string", "pattern": "^/[^/]*/[^/]*/keda$", "description": "URI identifying the KEDA instance that emitted the event, in the format /{cluster-name}/{keda-namespace}/keda.", "example": "/my-cluster/keda/keda" }, "subject": { "type": "string", "pattern": "^/[^/]*/[^/]*/[^/]*/[^/]*$", "description": "URI identifying the specific resource that triggered the event, in the format /{cluster-name}/{namespace}/{object-type}/{object-name}.", "example": "/my-cluster/default/scaledobject/my-app-scaler" }, "id": { "type": "string", "format": "uuid", "description": "Unique identifier for this CloudEvent instance.", "example": "a1b2c3d4-e5f6-7890-abcd-ef1234567890" }, "time": { "type": "string", "format": "date-time", "description": "ISO 8601 timestamp of when the event was emitted.", "example": "2026-03-18T10:00:00Z" }, "datacontenttype": { "type": "string", "const": "application/json", "description": "MIME type of the data field. Always application/json." }, "data": { "$ref": "#/$defs/EventData" } }, "$defs": { "EventData": { "type": "object", "description": "Payload data carried by a KEDA CloudEvent, providing machine-readable reason code and human-readable detail message.", "required": ["reason", "message"], "properties": { "reason": { "type": "string", "description": "Machine-readable reason code identifying the type of scaling event that occurred.", "enum": [ "ScalerError", "ScaledObjectReady", "ScaledObjectDeleted", "ScaledJobReady", "ScaledJobDeleted", "KEDAScalersStarted", "KEDAScalersStopped", "AuthenticationFailed" ], "example": "ScalerError" }, "message": { "type": "string", "description": "Human-readable description providing context about the scaling event, including which resource was affected and any error details.", "example": "Error when getting metric for trigger type kafka. Unable to connect to broker at kafka-broker:9092" } } }, "CloudEventSource": { "type": "object", "description": "Kubernetes custom resource that configures where KEDA delivers CloudEvents. CloudEventSource is namespace-scoped; ClusterCloudEventSource is cluster-scoped.", "required": ["apiVersion", "kind", "metadata", "spec"], "properties": { "apiVersion": { "type": "string", "const": "eventing.keda.sh/v1alpha1", "description": "API version for the KEDA CloudEventSource resource." }, "kind": { "type": "string", "enum": ["CloudEventSource", "ClusterCloudEventSource"], "description": "Resource kind. CloudEventSource is namespace-scoped; ClusterCloudEventSource applies cluster-wide." }, "metadata": { "type": "object", "description": "Standard Kubernetes object metadata.", "required": ["name"], "properties": { "name": { "type": "string", "description": "Name of the CloudEventSource resource." }, "namespace": { "type": "string", "description": "Namespace (CloudEventSource only)." } } }, "spec": { "$ref": "#/$defs/CloudEventSourceSpec" } } }, "CloudEventSourceSpec": { "type": "object", "description": "Specification for a CloudEventSource defining the destination and optional event type filters.", "required": ["destination"], "properties": { "clusterName": { "type": "string", "description": "Optional cluster name included in the CloudEvent source and subject fields. Defaults to the Kubernetes cluster name if discoverable." }, "authenticationRef": { "type": "object", "description": "Optional reference to a TriggerAuthentication for authenticating CloudEvent delivery to the destination.", "required": ["name"], "properties": { "name": { "type": "string", "description": "Name of the TriggerAuthentication resource." }, "kind": { "type": "string", "enum": ["TriggerAuthentication", "ClusterTriggerAuthentication"], "description": "Kind of the authentication resource." } } }, "destination": { "$ref": "#/$defs/CloudEventDestination" }, "eventSubscription": { "$ref": "#/$defs/EventSubscription" } } }, "CloudEventDestination": { "type": "object", "description": "Destination configuration for CloudEvent delivery. Either an HTTP endpoint or Azure Event Grid topic must be configured.", "properties": { "http": { "type": "object", "description": "HTTP destination configuration for CloudEvent delivery.", "required": ["uri"], "properties": { "uri": { "type": "string", "format": "uri", "description": "HTTP(S) URL to which KEDA will POST CloudEvents.", "example": "https://my-sink.example.com/events" } } }, "azureEventGridTopic": { "type": "object", "description": "Azure Event Grid destination configuration for CloudEvent delivery.", "required": ["endpoint"], "properties": { "endpoint": { "type": "string", "format": "uri", "description": "Azure Event Grid topic endpoint URL.", "example": "https://my-topic.eventgrid.azure.net/api/events" } } } } }, "EventSubscription": { "type": "object", "description": "Optional event type filter configuration for the CloudEventSource.", "properties": { "includedEventTypes": { "type": "array", "description": "When specified, only events with these reason codes are delivered. All others are suppressed.", "items": { "type": "string", "enum": [ "keda.scaledobject.ready.v1", "keda.scaledobject.removed.v1", "keda.scaledobject.failed.v1", "keda.scaledjob.ready.v1", "keda.scaledjob.removed.v1", "keda.scaledjob.failed.v1" ] } }, "excludedEventTypes": { "type": "array", "description": "Events with these reason codes are suppressed and not delivered.", "items": { "type": "string", "enum": [ "keda.scaledobject.ready.v1", "keda.scaledobject.removed.v1", "keda.scaledobject.failed.v1", "keda.scaledjob.ready.v1", "keda.scaledjob.removed.v1", "keda.scaledjob.failed.v1" ] } } } } } }