public async Task <HttpResponseMessage> TrackAsync <E, T>(E Event, T Properties) where E : class where T : class
        {
            DataInputCleaning.validateOnlyPrimitiveTypes <E>();
            DataInputCleaning.validateNoPrimitiveTypes <T>();

            JObject joProperties = JObject.FromObject(Properties);

            joProperties = ReflectionPropertyAdder(joProperties, Properties);

            joProperties.Add(MPReservedNames.TrackToken, APIToken);
            joProperties.Add(MPReservedNames.TrackDistinctId, joProperties.GetValue(nameof(MPSet.DistinctId)));
            joProperties.Remove(nameof(MPSet.DistinctId));

            var MixPanelEvent = new MixPanelBaseRequestEvent <JObject>(Event.ToString(), joProperties);

            return(await EndPointClient.SendData(MixPanelEvent, MixPanelType.track));
        }