Skip to main content
View as Markdown

Integration Patterns - Integration

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.

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:

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):

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:

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:

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:

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]"):

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:

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:

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:

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):

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:

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:

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:

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"