private async Task <HttpResponseMessage> PostAsync <T>(
            string endpoint,
            T content,
            string correlationId,
            string envId           = null,
            bool skipSerialization = false)
        {
            if (content is IBaseFraudProtectionEvent purchaseEventContent)
            {
                //All events using the Purchase APIs have the following data
                purchaseEventContent.Metadata = new EventMetadata
                {
                    TrackingId        = Guid.NewGuid().ToString(),
                    MerchantTimeStamp = DateTimeOffset.Now
                };
            }

            var authToken = await _tokenProviderService.AcquireTokenAsync();

            var url = $"{_settings.ApiBaseUrl}{endpoint}";
            var serializedObject  = skipSerialization ? content as string : JsonSerializer.Serialize(content, _requestSerializationOptions);
            var serializedContent = new StringContent(serializedObject, Encoding.UTF8, "application/json");

            return(await _httpClient.PostWithHeadersAsync(
                       url,
                       serializedContent,
                       new Dictionary <string, string>
            {
                { Constants.CORRELATION_ID, correlationId },
                { Constants.AUTHORIZATION, $"{Constants.BEARER} {authToken}" },
                { Constants.ENVIRONMENT_ID, envId ?? _settings.InstanceId },
            }));
        }