---
title: Integration Patterns
url: https://docs.kaltura.com/docs/rich-media-cms-apis/integration/webhooks-integration-patterns
---

## Integration Patterns

All patterns follow the same workflow: `listTemplates` → `clone` → `update` (configure) → `updateStatus` (activate).

### Entry Processing Complete Webhook

Notify your backend when entries finish transcoding.

```bash
curl -X POST "$KALTURA_SERVICE_URL/service/eventnotification_eventnotificationtemplate/action/listTemplates" \
  -d "ks=$KALTURA_KS" \
  -d "format=1" \
  -d "filter[objectType]=KalturaEventNotificationTemplateFilter" \
  -d "filter[typeEqual]=httpNotification.Http"
```

Find the "Entry Status Changed" template (eventType=3, eventObjectType=1), then clone:

```bash
curl -X POST "$KALTURA_SERVICE_URL/service/eventnotification_eventnotificationtemplate/action/clone" \
  -d "ks=$KALTURA_KS" \
  -d "format=1" \
  -d "id=$SYSTEM_TEMPLATE_ID" \
  -d "eventNotificationTemplate[objectType]=KalturaHttpNotificationTemplate" \
  -d "eventNotificationTemplate[name]=Entry Ready Notification" \
  -d "eventNotificationTemplate[systemName]=MY_ENTRY_READY" \
  -d "eventNotificationTemplate[url]=https://myapp.example.com/webhooks/entry-ready" \
  -d "eventNotificationTemplate[method]=2" \
  -d "eventNotificationTemplate[signSecret]=my-secret" \
  -d "eventNotificationTemplate[secureHashingAlgo]=2"
```

Configure payload and delayed dispatch (fires only when entry reaches READY):

```bash
curl -X POST "$KALTURA_SERVICE_URL/service/eventnotification_eventnotificationtemplate/action/update" \
  -d "ks=$KALTURA_KS" \
  -d "format=1" \
  -d "id=$TEMPLATE_ID" \
  -d "eventNotificationTemplate[objectType]=KalturaHttpNotificationTemplate" \
  -d "eventNotificationTemplate[eventDelayedCondition]=1" \
  -d "eventNotificationTemplate[data][objectType]=KalturaHttpNotificationObjectData" \
  -d "eventNotificationTemplate[data][format]=1" \
  -d "eventNotificationTemplate[data][apiObjectType]=KalturaBaseEntry"
```

Activate:

```bash
curl -X POST "$KALTURA_SERVICE_URL/service/eventnotification_eventnotificationtemplate/action/updateStatus" \
  -d "ks=$KALTURA_KS" \
  -d "format=1" \
  -d "id=$TEMPLATE_ID" \
  -d "status=2"
```

### Caption/Transcript Added Webhook

Get notified when new captions or transcripts are added to entries:

```bash
curl -X POST "$KALTURA_SERVICE_URL/service/eventnotification_eventnotificationtemplate/action/listTemplates" \
  -d "ks=$KALTURA_KS" \
  -d "format=1" \
  -d "filter[objectType]=KalturaEventNotificationTemplateFilter" \
  -d "filter[typeEqual]=httpNotification.Http"
```

Find "New Caption Asset Added To Entry" (eventType=5, eventObjectType=captionAssetEventNotifications.CaptionAsset), then clone and configure.

### Metadata Field Change Webhook

Clone the "Metadata Field Changed" system template (eventType=6, eventObjectType=metadataEventNotifications.Metadata). The template includes a `KalturaMetadataFieldChangedCondition` that fires on metadata version changes.

After cloning, update the user parameters to reference your metadata profile:

```bash
curl -X POST "$KALTURA_SERVICE_URL/service/eventnotification_eventnotificationtemplate/action/update" \
  -d "ks=$KALTURA_KS" \
  -d "format=1" \
  -d "id=$TEMPLATE_ID" \
  -d "eventNotificationTemplate[objectType]=KalturaHttpNotificationTemplate" \
  -d "eventNotificationTemplate[url]=https://myapp.example.com/webhooks/metadata-changed" \
  -d "eventNotificationTemplate[method]=2" \
  -d "eventNotificationTemplate[data][objectType]=KalturaHttpNotificationObjectData" \
  -d "eventNotificationTemplate[data][format]=1" \
  -d "eventNotificationTemplate[data][apiObjectType]=KalturaMetadata"
```

### User Added to Category (Email)

Clone system template 842 ("User was added to category as [role]"):

```bash
curl -X POST "$KALTURA_SERVICE_URL/service/eventnotification_eventnotificationtemplate/action/clone" \
  -d "ks=$KALTURA_KS" \
  -d "format=1" \
  -d "id=842" \
  -d "eventNotificationTemplate[objectType]=KalturaEmailNotificationTemplate" \
  -d "eventNotificationTemplate[name]=New Category Member Alert" \
  -d "eventNotificationTemplate[systemName]=MY_CATUSER_ADDED"
```

Configure recipients and email content:

```bash
curl -X POST "$KALTURA_SERVICE_URL/service/eventnotification_eventnotificationtemplate/action/update" \
  -d "ks=$KALTURA_KS" \
  -d "format=1" \
  -d "id=$TEMPLATE_ID" \
  -d "eventNotificationTemplate[objectType]=KalturaEmailNotificationTemplate" \
  -d "eventNotificationTemplate[subject]=New member joined your category" \
  -d "eventNotificationTemplate[body]=A new user has been added to a category you manage." \
  -d "eventNotificationTemplate[fromEmail]=notifications@example.com" \
  -d "eventNotificationTemplate[fromName]=Video Platform" \
  -d "eventNotificationTemplate[to][objectType]=KalturaEmailNotificationStaticRecipientProvider" \
  -d "eventNotificationTemplate[to][emailRecipients][0][objectType]=KalturaEmailNotificationRecipient" \
  -d "eventNotificationTemplate[to][emailRecipients][0][email][objectType]=KalturaStringValue" \
  -d "eventNotificationTemplate[to][emailRecipients][0][email][value]=manager@example.com" \
  -d "eventNotificationTemplate[to][emailRecipients][0][name][objectType]=KalturaStringValue" \
  -d "eventNotificationTemplate[to][emailRecipients][0][name][value]=Category Manager"
```

### Category Entry Approval/Rejection Webhook

Track when entries are approved or rejected in categories with moderation enabled:

```bash
curl -X POST "$KALTURA_SERVICE_URL/service/eventnotification_eventnotificationtemplate/action/listTemplates" \
  -d "ks=$KALTURA_KS" \
  -d "format=1" \
  -d "filter[objectType]=KalturaEventNotificationTemplateFilter" \
  -d "filter[typeEqual]=httpNotification.Http" \
  -d "filter[systemNameEqual]=HTTP_Entry_Approved_In_Category"
```

Clone the template for entry approval notifications:

```bash
curl -X POST "$KALTURA_SERVICE_URL/service/eventnotification_eventnotificationtemplate/action/clone" \
  -d "ks=$KALTURA_KS" \
  -d "format=1" \
  -d "id=$CATEGORY_ENTRY_APPROVED_TEMPLATE_ID" \
  -d "eventNotificationTemplate[objectType]=KalturaHttpNotificationTemplate" \
  -d "eventNotificationTemplate[name]=Category Entry Approved" \
  -d "eventNotificationTemplate[systemName]=MY_CATENTRY_APPROVED" \
  -d "eventNotificationTemplate[url]=https://myapp.example.com/webhooks/category-entry-approved" \
  -d "eventNotificationTemplate[method]=2" \
  -d "eventNotificationTemplate[signSecret]=my-webhook-secret" \
  -d "eventNotificationTemplate[secureHashingAlgo]=2"
```

Use the same approach with `HTTP_Entry_Rejected_In_Category` for rejection events. Both templates fire on `categoryEntry` status changes (eventType=3, eventObjectType=37) with conditions checking `CategoryEntryStatus::ACTIVE` or `CategoryEntryStatus::REJECTED`.

### User Added/Removed from Category (HTTP Webhook)

Track category membership changes via HTTP webhooks (complement to the email templates in 12.4):

```bash
curl -X POST "$KALTURA_SERVICE_URL/service/eventnotification_eventnotificationtemplate/action/listTemplates" \
  -d "ks=$KALTURA_KS" \
  -d "format=1" \
  -d "filter[objectType]=KalturaEventNotificationTemplateFilter" \
  -d "filter[typeEqual]=httpNotification.Http" \
  -d "filter[systemNameEqual]=Http_User_Added_To_Category"
```

Clone for user membership webhooks:

```bash
curl -X POST "$KALTURA_SERVICE_URL/service/eventnotification_eventnotificationtemplate/action/clone" \
  -d "ks=$KALTURA_KS" \
  -d "format=1" \
  -d "id=$USER_ADDED_TO_CATEGORY_TEMPLATE_ID" \
  -d "eventNotificationTemplate[objectType]=KalturaHttpNotificationTemplate" \
  -d "eventNotificationTemplate[name]=User Joined Category Webhook" \
  -d "eventNotificationTemplate[systemName]=MY_USER_JOINED_CATEGORY" \
  -d "eventNotificationTemplate[url]=https://myapp.example.com/webhooks/user-category-join" \
  -d "eventNotificationTemplate[method]=2" \
  -d "eventNotificationTemplate[signSecret]=my-webhook-secret" \
  -d "eventNotificationTemplate[secureHashingAlgo]=2"
```

Use `User_Was_Removed_From_Category` for the removal counterpart. The user-added template fires on `OBJECT_ADDED` (eventType=2) for `CATEGORYKUSER` (eventObjectType=12) with status=ACTIVE. The removal template fires on `OBJECT_DELETED` (eventType=7).

### Flavor Asset Status Change Webhook

Track transcoding progress per flavor:

```bash
curl -X POST "$KALTURA_SERVICE_URL/service/eventnotification_eventnotificationtemplate/action/clone" \
  -d "ks=$KALTURA_KS" \
  -d "format=1" \
  -d "id=$FLAVOR_STATUS_TEMPLATE_ID" \
  -d "eventNotificationTemplate[objectType]=KalturaHttpNotificationTemplate" \
  -d "eventNotificationTemplate[name]=Flavor Transcoding Complete" \
  -d "eventNotificationTemplate[systemName]=MY_FLAVOR_READY" \
  -d "eventNotificationTemplate[url]=https://myapp.example.com/webhooks/flavor-ready" \
  -d "eventNotificationTemplate[method]=2" \
  -d "eventNotificationTemplate[data][objectType]=KalturaHttpNotificationObjectData" \
  -d "eventNotificationTemplate[data][format]=1" \
  -d "eventNotificationTemplate[data][apiObjectType]=KalturaFlavorAsset"
```

### CRM Sync (Clone-and-Customize)

Full production pattern with authentication and signing:

```bash
curl -X POST "$KALTURA_SERVICE_URL/service/eventnotification_eventnotificationtemplate/action/clone" \
  -d "ks=$KALTURA_KS" \
  -d "format=1" \
  -d "id=$SYSTEM_TEMPLATE_ID" \
  -d "eventNotificationTemplate[objectType]=KalturaHttpNotificationTemplate" \
  -d "eventNotificationTemplate[name]=CRM Entry Sync" \
  -d "eventNotificationTemplate[systemName]=CRM_ENTRY_SYNC" \
  -d "eventNotificationTemplate[url]=https://crm.example.com/api/kaltura/entry-changed" \
  -d "eventNotificationTemplate[method]=2" \
  -d "eventNotificationTemplate[authUsername]=kaltura-integration" \
  -d "eventNotificationTemplate[authPassword]=integration-secret" \
  -d "eventNotificationTemplate[authenticationMethod]=1" \
  -d "eventNotificationTemplate[signSecret]=crm-webhook-secret" \
  -d "eventNotificationTemplate[secureHashingAlgo]=2" \
  -d "eventNotificationTemplate[data][objectType]=KalturaHttpNotificationObjectData" \
  -d "eventNotificationTemplate[data][format]=1" \
  -d "eventNotificationTemplate[data][apiObjectType]=KalturaBaseEntry"
```
