Azure Event Grid Outbound Events / Signal - Capture
Outbound Events (Signals) push real-time notifications when nodes are batch-upserted in your IKG.
This configuration sets up event streaming to Azure Event Grid:
1. Define Azure Event Grid as the event provider.
2. Route BatchUpsertNodes events matching specific criteria to your topic.
3. Filter events by node label and property values (e.g., Car nodes where manufacturer = "pontiac").
Use case
Scenario: You need to react when specific data is batch-upserted in your IKG via the REST API.
Each time nodes matching your criteria are upserted via the BatchUpsertNodes endpoint, an event is sent to your Azure Event Grid topic. This enables:
- Real-time data synchronization with Azure services.
- Triggering Azure Functions or Logic Apps when specific data arrives.
- Selective event filtering to process only relevant batch operations.
Note: Only one Outbound Events configuration can be active per project. This configuration specifically targets the batch.upsert.node event type.

Requirements
- ServiceAccount credentials created in the IndyKite Hub for your organization.
- Application Agent credentials for capturing data via the Capture API.
- An Azure Event Grid namespace with a topic and subscription ready.
Steps
1. Ensure your Azure Event Grid topic and subscription are configured.
2. Apply the Terraform configuration with indykite.audit.capture.batch.upsert.node eventType.
3. Capture nodes with the Car label and manufacturer property set to "pontiac".
4. Add more nodes matching the same criteria.
5. Verify that event messages appear in your Azure Event Grid topic.
6. Confirm that non-matching nodes and other event types do not trigger events.
Step 2
terraform {
required_providers {
indykite = {
source = "indykite/indykite"
version = 1.26. # or latest version
}
}
}
# indykite provider integrates IndyKite platform with Terraform scripting.
# Provider for now does not support any parameters and all is set within service account credential file.
provider "indykite" {}
resource "time_static" "example" {}
resource "indykite_event_sink" "outbound_event" {
name = "outbound-event"
display_name = "Outbound Event"
location = "project_id"
providers {
provider_name = "provider-name"
azure_event_grid {
topic_endpoint = "https://ik-test.eventgrid.azure.net/api/events"
access_key = "secret-access-key"
}
}
routes {
provider_id = "provider-name"
stop_processing = true
keys_values_filter {
key_value_pairs {
key = "manufacturer"
value = "pontiac"
}
key_value_pairs {
key = "captureLabel"
value = "Car"
}
event_type = "indykite.audit.capture.batch.upsert.node"
}
route_display_name = "Configuration Audit Events"
route_id = "config-audit-log"
}
}
Step 3
Capture the nodes needed for this use case.
{
"nodes": [
{
"external_id": "alice",
"is_identity": true,
"type": "Person",
"properties": [
{
"type": "email",
"value": "alice@email.com"
},
{
"type": "given_name",
"value": "Alice"
},
{
"type": "last_name",
"value": "Smith"
}
]
},
{
"external_id": "knightrider",
"type": "Person",
"is_identity": true,
"properties": [
{
"type": "email",
"value": "knightrider@demo.com"
},
{
"type": "name",
"value": "Michael Knight"
}
]
},
{
"external_id": "satchmo",
"type": "Person",
"is_identity": true,
"properties": [
{
"type": "email",
"value": "satchmo@demo.com"
},
{
"type": "name",
"value": "Louis Armstrong"
}
]
},
{
"external_id": "karel",
"type": "Person",
"is_identity": true,
"properties": [
{
"type": "email",
"value": "karel@demo.com"
},
{
"type": "name",
"value": "Karel Plihal"
}
]
},
{
"external_id": "kitt",
"type": "Car",
"is_identity": false,
"properties": [
{
"type": "manufacturer",
"value": "pontiac"
},
{
"type": "model",
"value": "Firebird"
}
]
},
{
"external_id": "cadillacv16",
"type": "Car",
"is_identity": false,
"properties": [
{
"type": "manufacturer",
"value": "Cadillac"
},
{
"type": "model",
"value": "V-16"
}
]
},
{
"external_id": "harmonika",
"type": "Bus",
"is_identity": false,
"properties": [
{
"type": "manufacturer",
"value": "Ikarus"
},
{
"type": "model",
"value": "280"
}
]
},
{
"external_id": "listek",
"type": "Ticket",
"is_identity": false
},
{
"external_id": "airbook-xyz",
"type": "Laptop",
"is_identity": false
}
]
}Step 4
Capture additional nodes to trigger more events.
{
"nodes": [
{
"external_id": "kitten",
"type": "Car",
"is_identity": false,
"properties": [
{
"type": "manufacturer",
"value": "pontiac"
},
{
"type": "model",
"value": "Bonneville"
}
]
},
{
"external_id": "kitty",
"type": "Car",
"is_identity": false,
"properties": [
{
"type": "manufacturer",
"value": "pontiac"
},
{
"type": "model",
"value": "Catalina"
}
]
}
]
}