public dynamic CreateSubscription(int subscriptionTypeId, string applicationIdentifier, string name = null, int?billingSystemType = null, string billingSystemIdentifier = null) { var config = GetConfiguration(); if (config?.SubscriptionTypes == null || config.SubscriptionTypes.Count == 0) { throw new Exception("Missing configuration or subscription types, no subscription types found"); } var subscriptionType = config.SubscriptionTypes.FirstOrDefault(x => x.Id == subscriptionTypeId); if (subscriptionType == null) { throw new Exception($"Subscription type with id of: {subscriptionTypeId} was not found"); } var model = new SubscriberModel { ApplicationId = applicationIdentifier, BillingSystemType = billingSystemType ?? subscriptionType.BillingSystemType, BillingSystemIdentifier = billingSystemIdentifier, CompanyId = config.Company.Id, DefaultGracePeriod = subscriptionType.DefaultGracePeriod, DefaultNeverExpire = subscriptionType.DefaultNeverExpire, DefaultResetFeaturesOnRenewal = subscriptionType.DefaultResetFeaturesOnRenewal, DefaultRevertOnExpiration = subscriptionType.DefaultRevertOnExpiration, DefaultRevertTo = subscriptionType.DefaultRevertTo, Name = name, Version = VersionNumber, IsActive = true, SubscriptionTypeId = subscriptionType.Id, Features = subscriptionType.Features, ExpirationDate = DateTime.UtcNow.AddTicks(subscriptionType.TimeToExpireTicks.GetValueOrDefault()) }; var result = _webClientService.CreateSubscription(model); var newSubscriber = JsonConvert.DeserializeObject <SubscriberModel>(result); if (newSubscriber == null) { return(null); } StorageMethod.AddOrUpdateSubscriber(newSubscriber); _cache.Add(_cacheAppId + newSubscriber.ApplicationId, newSubscriber, MyCachePriority.Default); _cache.Add(_cacheKey + newSubscriber.Key, newSubscriber, MyCachePriority.Default); return(newSubscriber.ToDynamic()); }