Logging custom activities through the API

In addition to the default activity types used by the contact management feature, you can also create custom activity types:


Only users with the global administrator privilege level can define custom activity types.

  1. Open the Contact management application.
  2. Switch to Configuration -> Activity types.
  3. Click New activity type.
  4. Fill in the display name and note the code name of your new activity type.

New activity type

Enterprise license required

Features described on this page require the Kentico Xperience Enterprise license.

After you add a custom activity type, you can use the Xperience API to log the activity for contacts. You need to:

  1. Open your project in Visual Studio.
  2. Create an initializer class for your activity type. The class must inherit from CMS.Activities.CustomActivityInitializerBase.

    Add the class into a custom Class Library within your solution.

    Custom activity class example
    using CMS.Activities;
    public class MyActivityInitializer : CustomActivityInitializerBase
        private readonly string activityValue;
    	/// <summary>
        /// Default constructor that takes activity data as parameters.
        /// </summary>
        public MyActivityInitializer(string activityValue)
            this.activityValue = activityValue;
    	/// <summary>
        /// Initializes an activity with required data.
        /// </summary>
        public override void Initialize(IActivityInfo activity)
    		activity.ActivityTitle = "My custom activity title";
            activity.ActivityValue = activityValue;
    	/// <summary>
        /// The code name of the corresponding activity type in Xperience.
        /// </summary>
        public override string ActivityType
                return "MyActivity";
  3. Call the Log method of the IActivityLogService service within the code where you want the activity to be logged.

    Logging the activity
    using CMS.Core;
    using CMS.Activities;
    using CMS.Helpers;
    // Gets an instance of the activity logging service
    // In real-world scenarios, we recommend using dependency injection to get service instances
    var service = Service.Resolve<IActivityLogService>();
    // Prepares an initializer for logging the activity
    var activityInitializer = new MyActivityInitializer("value");
    // Logs the activity

    Tip: If  you need to log your activity in code where the HTTP request context is not available (for example in certain types of custom scheduled tasks), call the LogWithoutModifiersAndFilters(IActivityInitializer activityInitializer) method instead of Log.

The system now logs the custom activity when your custom code is triggered.