/* 
 * SendinBlue API
 *
 * SendinBlue provide a RESTFul API that can be used with any languages. With this API, you will be able to :   - Manage your campaigns and get the statistics   - Manage your contacts   - Send transactional Emails and SMS   - and much more...  You can download our wrappers at https://github.com/orgs/sendinblue  **Possible responses**   | Code | Message |   | :- -- -- -- -- -- --: | - -- -- -- -- -- -- |   | 200  | OK. Successful Request  |   | 201  | OK. Successful Creation |   | 202  | OK. Request accepted |   | 204  | OK. Successful Update/Deletion  |   | 400  | Error. Bad Request  |   | 401  | Error. Authentication Needed  |   | 402  | Error. Not enough credit, plan upgrade needed  |   | 403  | Error. Permission denied  |   | 404  | Error. Object does not exist |   | 405  | Error. Method not allowed  |   | 406  | Error. Not Acceptable  | 
 *
 * OpenAPI spec version: 3.0.0
 * Contact: contact@sendinblue.com
 * Generated by: https://github.com/swagger-api/swagger-codegen.git
 */

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using RestSharp.Portable;
using sib_api_v3_sdk.Client;
using sib_api_v3_sdk.Model;

namespace sib_api_v3_sdk.Api
{
    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public interface ITransactionalSMSApi : IApiAccessor
    {
        #region Synchronous Operations
        /// <summary>
        /// Get all the SMS activity (unaggregated events)
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="limit">Number of documents per page (optional, default to 50)</param>
        /// <param name="startDate">Mandatory if endDate is used. Starting date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="endDate">Mandatory if startDate is used. Ending date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="offset">Index of the first document of the page (optional, default to 0)</param>
        /// <param name="days">Number of days in the past including today (positive integer). Not compatible with &#39;startDate&#39; and &#39;endDate&#39; (optional)</param>
        /// <param name="phoneNumber">Filter the report for a specific phone number (optional)</param>
        /// <param name="_event">Filter the report for specific events (optional)</param>
        /// <param name="tags">Filter the report for specific tags passed as a serialized urlencoded array (optional)</param>
        /// <returns>GetSmsEventReport</returns>
        GetSmsEventReport GetSmsEvents (long? limit = null, string startDate = null, string endDate = null, long? offset = null, int? days = null, string phoneNumber = null, string _event = null, string tags = null);

        /// <summary>
        /// Get all the SMS activity (unaggregated events)
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="limit">Number of documents per page (optional, default to 50)</param>
        /// <param name="startDate">Mandatory if endDate is used. Starting date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="endDate">Mandatory if startDate is used. Ending date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="offset">Index of the first document of the page (optional, default to 0)</param>
        /// <param name="days">Number of days in the past including today (positive integer). Not compatible with &#39;startDate&#39; and &#39;endDate&#39; (optional)</param>
        /// <param name="phoneNumber">Filter the report for a specific phone number (optional)</param>
        /// <param name="_event">Filter the report for specific events (optional)</param>
        /// <param name="tags">Filter the report for specific tags passed as a serialized urlencoded array (optional)</param>
        /// <returns>ApiResponse of GetSmsEventReport</returns>
        ApiResponse<GetSmsEventReport> GetSmsEventsWithHttpInfo (long? limit = null, string startDate = null, string endDate = null, long? offset = null, int? days = null, string phoneNumber = null, string _event = null, string tags = null);
        /// <summary>
        /// Get your SMS activity aggregated over a period of time
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="startDate">Mandatory if endDate is used. Starting date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="endDate">Mandatory if startDate is used. Ending date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="days">Number of days in the past including today (positive integer). Not compatible with startDate and endDate (optional)</param>
        /// <param name="tag">Filter on a tag (optional)</param>
        /// <returns>GetTransacAggregatedSmsReport</returns>
        GetTransacAggregatedSmsReport GetTransacAggregatedSmsReport (string startDate = null, string endDate = null, int? days = null, string tag = null);

        /// <summary>
        /// Get your SMS activity aggregated over a period of time
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="startDate">Mandatory if endDate is used. Starting date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="endDate">Mandatory if startDate is used. Ending date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="days">Number of days in the past including today (positive integer). Not compatible with startDate and endDate (optional)</param>
        /// <param name="tag">Filter on a tag (optional)</param>
        /// <returns>ApiResponse of GetTransacAggregatedSmsReport</returns>
        ApiResponse<GetTransacAggregatedSmsReport> GetTransacAggregatedSmsReportWithHttpInfo (string startDate = null, string endDate = null, int? days = null, string tag = null);
        /// <summary>
        /// Get your SMS activity aggregated per day
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="startDate">Mandatory if endDate is used. Starting date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="endDate">Mandatory if startDate is used. Ending date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="days">Number of days in the past including today (positive integer). Not compatible with &#39;startDate&#39; and &#39;endDate&#39; (optional)</param>
        /// <param name="tag">Filter on a tag (optional)</param>
        /// <returns>GetTransacSmsReport</returns>
        GetTransacSmsReport GetTransacSmsReport (string startDate = null, string endDate = null, int? days = null, string tag = null);

        /// <summary>
        /// Get your SMS activity aggregated per day
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="startDate">Mandatory if endDate is used. Starting date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="endDate">Mandatory if startDate is used. Ending date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="days">Number of days in the past including today (positive integer). Not compatible with &#39;startDate&#39; and &#39;endDate&#39; (optional)</param>
        /// <param name="tag">Filter on a tag (optional)</param>
        /// <returns>ApiResponse of GetTransacSmsReport</returns>
        ApiResponse<GetTransacSmsReport> GetTransacSmsReportWithHttpInfo (string startDate = null, string endDate = null, int? days = null, string tag = null);
        /// <summary>
        /// Send the SMS campaign to the specified mobile number
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sendTransacSms">Values to send a transactional SMS</param>
        /// <returns>SendSms</returns>
        SendSms SendTransacSms (SendTransacSms sendTransacSms);

        /// <summary>
        /// Send the SMS campaign to the specified mobile number
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sendTransacSms">Values to send a transactional SMS</param>
        /// <returns>ApiResponse of SendSms</returns>
        ApiResponse<SendSms> SendTransacSmsWithHttpInfo (SendTransacSms sendTransacSms);
        #endregion Synchronous Operations
        #region Asynchronous Operations
        /// <summary>
        /// Get all the SMS activity (unaggregated events)
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="limit">Number of documents per page (optional, default to 50)</param>
        /// <param name="startDate">Mandatory if endDate is used. Starting date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="endDate">Mandatory if startDate is used. Ending date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="offset">Index of the first document of the page (optional, default to 0)</param>
        /// <param name="days">Number of days in the past including today (positive integer). Not compatible with &#39;startDate&#39; and &#39;endDate&#39; (optional)</param>
        /// <param name="phoneNumber">Filter the report for a specific phone number (optional)</param>
        /// <param name="_event">Filter the report for specific events (optional)</param>
        /// <param name="tags">Filter the report for specific tags passed as a serialized urlencoded array (optional)</param>
        /// <returns>Task of GetSmsEventReport</returns>
        System.Threading.Tasks.Task<GetSmsEventReport> GetSmsEventsAsync (long? limit = null, string startDate = null, string endDate = null, long? offset = null, int? days = null, string phoneNumber = null, string _event = null, string tags = null);

        /// <summary>
        /// Get all the SMS activity (unaggregated events)
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="limit">Number of documents per page (optional, default to 50)</param>
        /// <param name="startDate">Mandatory if endDate is used. Starting date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="endDate">Mandatory if startDate is used. Ending date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="offset">Index of the first document of the page (optional, default to 0)</param>
        /// <param name="days">Number of days in the past including today (positive integer). Not compatible with &#39;startDate&#39; and &#39;endDate&#39; (optional)</param>
        /// <param name="phoneNumber">Filter the report for a specific phone number (optional)</param>
        /// <param name="_event">Filter the report for specific events (optional)</param>
        /// <param name="tags">Filter the report for specific tags passed as a serialized urlencoded array (optional)</param>
        /// <returns>Task of ApiResponse (GetSmsEventReport)</returns>
        System.Threading.Tasks.Task<ApiResponse<GetSmsEventReport>> GetSmsEventsAsyncWithHttpInfo (long? limit = null, string startDate = null, string endDate = null, long? offset = null, int? days = null, string phoneNumber = null, string _event = null, string tags = null);
        /// <summary>
        /// Get your SMS activity aggregated over a period of time
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="startDate">Mandatory if endDate is used. Starting date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="endDate">Mandatory if startDate is used. Ending date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="days">Number of days in the past including today (positive integer). Not compatible with startDate and endDate (optional)</param>
        /// <param name="tag">Filter on a tag (optional)</param>
        /// <returns>Task of GetTransacAggregatedSmsReport</returns>
        System.Threading.Tasks.Task<GetTransacAggregatedSmsReport> GetTransacAggregatedSmsReportAsync (string startDate = null, string endDate = null, int? days = null, string tag = null);

        /// <summary>
        /// Get your SMS activity aggregated over a period of time
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="startDate">Mandatory if endDate is used. Starting date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="endDate">Mandatory if startDate is used. Ending date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="days">Number of days in the past including today (positive integer). Not compatible with startDate and endDate (optional)</param>
        /// <param name="tag">Filter on a tag (optional)</param>
        /// <returns>Task of ApiResponse (GetTransacAggregatedSmsReport)</returns>
        System.Threading.Tasks.Task<ApiResponse<GetTransacAggregatedSmsReport>> GetTransacAggregatedSmsReportAsyncWithHttpInfo (string startDate = null, string endDate = null, int? days = null, string tag = null);
        /// <summary>
        /// Get your SMS activity aggregated per day
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="startDate">Mandatory if endDate is used. Starting date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="endDate">Mandatory if startDate is used. Ending date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="days">Number of days in the past including today (positive integer). Not compatible with &#39;startDate&#39; and &#39;endDate&#39; (optional)</param>
        /// <param name="tag">Filter on a tag (optional)</param>
        /// <returns>Task of GetTransacSmsReport</returns>
        System.Threading.Tasks.Task<GetTransacSmsReport> GetTransacSmsReportAsync (string startDate = null, string endDate = null, int? days = null, string tag = null);

        /// <summary>
        /// Get your SMS activity aggregated per day
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="startDate">Mandatory if endDate is used. Starting date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="endDate">Mandatory if startDate is used. Ending date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="days">Number of days in the past including today (positive integer). Not compatible with &#39;startDate&#39; and &#39;endDate&#39; (optional)</param>
        /// <param name="tag">Filter on a tag (optional)</param>
        /// <returns>Task of ApiResponse (GetTransacSmsReport)</returns>
        System.Threading.Tasks.Task<ApiResponse<GetTransacSmsReport>> GetTransacSmsReportAsyncWithHttpInfo (string startDate = null, string endDate = null, int? days = null, string tag = null);
        /// <summary>
        /// Send the SMS campaign to the specified mobile number
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sendTransacSms">Values to send a transactional SMS</param>
        /// <returns>Task of SendSms</returns>
        System.Threading.Tasks.Task<SendSms> SendTransacSmsAsync (SendTransacSms sendTransacSms);

        /// <summary>
        /// Send the SMS campaign to the specified mobile number
        /// </summary>
        /// <remarks>
        /// 
        /// </remarks>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sendTransacSms">Values to send a transactional SMS</param>
        /// <returns>Task of ApiResponse (SendSms)</returns>
        System.Threading.Tasks.Task<ApiResponse<SendSms>> SendTransacSmsAsyncWithHttpInfo (SendTransacSms sendTransacSms);
        #endregion Asynchronous Operations
    }

    /// <summary>
    /// Represents a collection of functions to interact with the API endpoints
    /// </summary>
    public partial class TransactionalSMSApi : ITransactionalSMSApi
    {
        private sib_api_v3_sdk.Client.ExceptionFactory _exceptionFactory = (name, response) => null;

        /// <summary>
        /// Initializes a new instance of the <see cref="TransactionalSMSApi"/> class.
        /// </summary>
        /// <returns></returns>
        public TransactionalSMSApi(String basePath)
        {
            this.Configuration = new sib_api_v3_sdk.Client.Configuration { BasePath = basePath };

            ExceptionFactory = sib_api_v3_sdk.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="TransactionalSMSApi"/> class
        /// using Configuration object
        /// </summary>
        /// <param name="configuration">An instance of Configuration</param>
        /// <returns></returns>
        public TransactionalSMSApi(sib_api_v3_sdk.Client.Configuration configuration = null)
        {
            if (configuration == null) // use the default one in Configuration
                this.Configuration = sib_api_v3_sdk.Client.Configuration.Default;
            else
                this.Configuration = configuration;

            ExceptionFactory = sib_api_v3_sdk.Client.Configuration.DefaultExceptionFactory;
        }

        /// <summary>
        /// Gets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        public String GetBasePath()
        {
            return this.Configuration.ApiClient.RestClient.BaseUrl.ToString();
        }

        /// <summary>
        /// Sets the base path of the API client.
        /// </summary>
        /// <value>The base path</value>
        [Obsolete("SetBasePath is deprecated, please do 'Configuration.ApiClient = new ApiClient(\"http://new-path\")' instead.")]
        public void SetBasePath(String basePath)
        {
            // do nothing
        }

        /// <summary>
        /// Gets or sets the configuration object
        /// </summary>
        /// <value>An instance of the Configuration</value>
        public sib_api_v3_sdk.Client.Configuration Configuration {get; set;}

        /// <summary>
        /// Provides a factory method hook for the creation of exceptions.
        /// </summary>
        public sib_api_v3_sdk.Client.ExceptionFactory ExceptionFactory
        {
            get
            {
                if (_exceptionFactory != null && _exceptionFactory.GetInvocationList().Length > 1)
                {
                    throw new InvalidOperationException("Multicast delegate for ExceptionFactory is unsupported.");
                }
                return _exceptionFactory;
            }
            set { _exceptionFactory = value; }
        }

        /// <summary>
        /// Gets the default header.
        /// </summary>
        /// <returns>Dictionary of HTTP header</returns>
        [Obsolete("DefaultHeader is deprecated, please use Configuration.DefaultHeader instead.")]
        public IDictionary<String, String> DefaultHeader()
        {
            return new ReadOnlyDictionary<string, string>(this.Configuration.DefaultHeader);
        }

        /// <summary>
        /// Add default header.
        /// </summary>
        /// <param name="key">Header field name.</param>
        /// <param name="value">Header field value.</param>
        /// <returns></returns>
        [Obsolete("AddDefaultHeader is deprecated, please use Configuration.AddDefaultHeader instead.")]
        public void AddDefaultHeader(string key, string value)
        {
            this.Configuration.AddDefaultHeader(key, value);
        }

        /// <summary>
        /// Get all the SMS activity (unaggregated events) 
        /// </summary>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="limit">Number of documents per page (optional, default to 50)</param>
        /// <param name="startDate">Mandatory if endDate is used. Starting date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="endDate">Mandatory if startDate is used. Ending date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="offset">Index of the first document of the page (optional, default to 0)</param>
        /// <param name="days">Number of days in the past including today (positive integer). Not compatible with &#39;startDate&#39; and &#39;endDate&#39; (optional)</param>
        /// <param name="phoneNumber">Filter the report for a specific phone number (optional)</param>
        /// <param name="_event">Filter the report for specific events (optional)</param>
        /// <param name="tags">Filter the report for specific tags passed as a serialized urlencoded array (optional)</param>
        /// <returns>GetSmsEventReport</returns>
        public GetSmsEventReport GetSmsEvents (long? limit = null, string startDate = null, string endDate = null, long? offset = null, int? days = null, string phoneNumber = null, string _event = null, string tags = null)
        {
             ApiResponse<GetSmsEventReport> localVarResponse = GetSmsEventsWithHttpInfo(limit, startDate, endDate, offset, days, phoneNumber, _event, tags);
             return localVarResponse.Data;
        }

        /// <summary>
        /// Get all the SMS activity (unaggregated events) 
        /// </summary>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="limit">Number of documents per page (optional, default to 50)</param>
        /// <param name="startDate">Mandatory if endDate is used. Starting date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="endDate">Mandatory if startDate is used. Ending date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="offset">Index of the first document of the page (optional, default to 0)</param>
        /// <param name="days">Number of days in the past including today (positive integer). Not compatible with &#39;startDate&#39; and &#39;endDate&#39; (optional)</param>
        /// <param name="phoneNumber">Filter the report for a specific phone number (optional)</param>
        /// <param name="_event">Filter the report for specific events (optional)</param>
        /// <param name="tags">Filter the report for specific tags passed as a serialized urlencoded array (optional)</param>
        /// <returns>ApiResponse of GetSmsEventReport</returns>
        public ApiResponse< GetSmsEventReport > GetSmsEventsWithHttpInfo (long? limit = null, string startDate = null, string endDate = null, long? offset = null, int? days = null, string phoneNumber = null, string _event = null, string tags = null)
        {

            var localVarPath = "./transactionalSMS/statistics/events";
            var localVarPathParams = new Dictionary<String, String>();
            var localVarQueryParams = new List<KeyValuePair<String, String>>();
            var localVarHeaderParams = new Dictionary<String, String>(this.Configuration.DefaultHeader);
            var localVarFormParams = new Dictionary<String, String>();
            var localVarFileParams = new Dictionary<String, FileParameter>();
            Object localVarPostBody = null;

            // to determine the Content-Type header
            String[] localVarHttpContentTypes = new String[] {
                "application/json"
            };
            String localVarHttpContentType = this.Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes);

            // to determine the Accept header
            String[] localVarHttpHeaderAccepts = new String[] {
                "application/json"
            };
            String localVarHttpHeaderAccept = this.Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts);
            if (localVarHttpHeaderAccept != null)
                localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept);

            if (limit != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "limit", limit)); // query parameter
            if (startDate != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "startDate", startDate)); // query parameter
            if (endDate != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "endDate", endDate)); // query parameter
            if (offset != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "offset", offset)); // query parameter
            if (days != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "days", days)); // query parameter
            if (phoneNumber != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "phoneNumber", phoneNumber)); // query parameter
            if (_event != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "event", _event)); // query parameter
            if (tags != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "tags", tags)); // query parameter

            // authentication (api-key) required
            if (!String.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("api-key")))
            {
                localVarHeaderParams["api-key"] = this.Configuration.GetApiKeyWithPrefix("api-key");
            }
            // authentication (partner-key) required
            if (!String.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("partner-key")))
            {
                localVarHeaderParams["partner-key"] = this.Configuration.GetApiKeyWithPrefix("partner-key");
            }

            // make the HTTP request
            IRestResponse localVarResponse = (IRestResponse) this.Configuration.ApiClient.CallApi(localVarPath,
                Method.GET, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams,
                localVarPathParams, localVarHttpContentType);

            int localVarStatusCode = (int) localVarResponse.StatusCode;

            if (ExceptionFactory != null)
            {
                Exception exception = ExceptionFactory("GetSmsEvents", localVarResponse);
                if (exception != null) throw exception;
            }

            return new ApiResponse<GetSmsEventReport>(localVarStatusCode,
                localVarResponse.Headers.ToDictionary(x => x.Key, x => x.Value.ToString()),
                (GetSmsEventReport) this.Configuration.ApiClient.Deserialize(localVarResponse, typeof(GetSmsEventReport)));
        }

        /// <summary>
        /// Get all the SMS activity (unaggregated events) 
        /// </summary>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="limit">Number of documents per page (optional, default to 50)</param>
        /// <param name="startDate">Mandatory if endDate is used. Starting date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="endDate">Mandatory if startDate is used. Ending date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="offset">Index of the first document of the page (optional, default to 0)</param>
        /// <param name="days">Number of days in the past including today (positive integer). Not compatible with &#39;startDate&#39; and &#39;endDate&#39; (optional)</param>
        /// <param name="phoneNumber">Filter the report for a specific phone number (optional)</param>
        /// <param name="_event">Filter the report for specific events (optional)</param>
        /// <param name="tags">Filter the report for specific tags passed as a serialized urlencoded array (optional)</param>
        /// <returns>Task of GetSmsEventReport</returns>
        public async System.Threading.Tasks.Task<GetSmsEventReport> GetSmsEventsAsync (long? limit = null, string startDate = null, string endDate = null, long? offset = null, int? days = null, string phoneNumber = null, string _event = null, string tags = null)
        {
             ApiResponse<GetSmsEventReport> localVarResponse = await GetSmsEventsAsyncWithHttpInfo(limit, startDate, endDate, offset, days, phoneNumber, _event, tags);
             return localVarResponse.Data;

        }

        /// <summary>
        /// Get all the SMS activity (unaggregated events) 
        /// </summary>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="limit">Number of documents per page (optional, default to 50)</param>
        /// <param name="startDate">Mandatory if endDate is used. Starting date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="endDate">Mandatory if startDate is used. Ending date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="offset">Index of the first document of the page (optional, default to 0)</param>
        /// <param name="days">Number of days in the past including today (positive integer). Not compatible with &#39;startDate&#39; and &#39;endDate&#39; (optional)</param>
        /// <param name="phoneNumber">Filter the report for a specific phone number (optional)</param>
        /// <param name="_event">Filter the report for specific events (optional)</param>
        /// <param name="tags">Filter the report for specific tags passed as a serialized urlencoded array (optional)</param>
        /// <returns>Task of ApiResponse (GetSmsEventReport)</returns>
        public async System.Threading.Tasks.Task<ApiResponse<GetSmsEventReport>> GetSmsEventsAsyncWithHttpInfo (long? limit = null, string startDate = null, string endDate = null, long? offset = null, int? days = null, string phoneNumber = null, string _event = null, string tags = null)
        {

            var localVarPath = "./transactionalSMS/statistics/events";
            var localVarPathParams = new Dictionary<String, String>();
            var localVarQueryParams = new List<KeyValuePair<String, String>>();
            var localVarHeaderParams = new Dictionary<String, String>(this.Configuration.DefaultHeader);
            var localVarFormParams = new Dictionary<String, String>();
            var localVarFileParams = new Dictionary<String, FileParameter>();
            Object localVarPostBody = null;

            // to determine the Content-Type header
            String[] localVarHttpContentTypes = new String[] {
                "application/json"
            };
            String localVarHttpContentType = this.Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes);

            // to determine the Accept header
            String[] localVarHttpHeaderAccepts = new String[] {
                "application/json"
            };
            String localVarHttpHeaderAccept = this.Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts);
            if (localVarHttpHeaderAccept != null)
                localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept);

            if (limit != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "limit", limit)); // query parameter
            if (startDate != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "startDate", startDate)); // query parameter
            if (endDate != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "endDate", endDate)); // query parameter
            if (offset != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "offset", offset)); // query parameter
            if (days != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "days", days)); // query parameter
            if (phoneNumber != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "phoneNumber", phoneNumber)); // query parameter
            if (_event != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "event", _event)); // query parameter
            if (tags != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "tags", tags)); // query parameter

            // authentication (api-key) required
            if (!String.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("api-key")))
            {
                localVarHeaderParams["api-key"] = this.Configuration.GetApiKeyWithPrefix("api-key");
            }
            // authentication (partner-key) required
            if (!String.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("partner-key")))
            {
                localVarHeaderParams["partner-key"] = this.Configuration.GetApiKeyWithPrefix("partner-key");
            }

            // make the HTTP request
            IRestResponse localVarResponse = (IRestResponse) await this.Configuration.ApiClient.CallApiAsync(localVarPath,
                Method.GET, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams,
                localVarPathParams, localVarHttpContentType);

            int localVarStatusCode = (int) localVarResponse.StatusCode;

            if (ExceptionFactory != null)
            {
                Exception exception = ExceptionFactory("GetSmsEvents", localVarResponse);
                if (exception != null) throw exception;
            }

            return new ApiResponse<GetSmsEventReport>(localVarStatusCode,
                localVarResponse.Headers.ToDictionary(x => x.Key, x => x.Value.ToString()),
                (GetSmsEventReport) this.Configuration.ApiClient.Deserialize(localVarResponse, typeof(GetSmsEventReport)));
        }

        /// <summary>
        /// Get your SMS activity aggregated over a period of time 
        /// </summary>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="startDate">Mandatory if endDate is used. Starting date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="endDate">Mandatory if startDate is used. Ending date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="days">Number of days in the past including today (positive integer). Not compatible with startDate and endDate (optional)</param>
        /// <param name="tag">Filter on a tag (optional)</param>
        /// <returns>GetTransacAggregatedSmsReport</returns>
        public GetTransacAggregatedSmsReport GetTransacAggregatedSmsReport (string startDate = null, string endDate = null, int? days = null, string tag = null)
        {
             ApiResponse<GetTransacAggregatedSmsReport> localVarResponse = GetTransacAggregatedSmsReportWithHttpInfo(startDate, endDate, days, tag);
             return localVarResponse.Data;
        }

        /// <summary>
        /// Get your SMS activity aggregated over a period of time 
        /// </summary>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="startDate">Mandatory if endDate is used. Starting date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="endDate">Mandatory if startDate is used. Ending date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="days">Number of days in the past including today (positive integer). Not compatible with startDate and endDate (optional)</param>
        /// <param name="tag">Filter on a tag (optional)</param>
        /// <returns>ApiResponse of GetTransacAggregatedSmsReport</returns>
        public ApiResponse< GetTransacAggregatedSmsReport > GetTransacAggregatedSmsReportWithHttpInfo (string startDate = null, string endDate = null, int? days = null, string tag = null)
        {

            var localVarPath = "./transactionalSMS/statistics/aggregatedReport";
            var localVarPathParams = new Dictionary<String, String>();
            var localVarQueryParams = new List<KeyValuePair<String, String>>();
            var localVarHeaderParams = new Dictionary<String, String>(this.Configuration.DefaultHeader);
            var localVarFormParams = new Dictionary<String, String>();
            var localVarFileParams = new Dictionary<String, FileParameter>();
            Object localVarPostBody = null;

            // to determine the Content-Type header
            String[] localVarHttpContentTypes = new String[] {
                "application/json"
            };
            String localVarHttpContentType = this.Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes);

            // to determine the Accept header
            String[] localVarHttpHeaderAccepts = new String[] {
                "application/json"
            };
            String localVarHttpHeaderAccept = this.Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts);
            if (localVarHttpHeaderAccept != null)
                localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept);

            if (startDate != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "startDate", startDate)); // query parameter
            if (endDate != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "endDate", endDate)); // query parameter
            if (days != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "days", days)); // query parameter
            if (tag != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "tag", tag)); // query parameter

            // authentication (api-key) required
            if (!String.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("api-key")))
            {
                localVarHeaderParams["api-key"] = this.Configuration.GetApiKeyWithPrefix("api-key");
            }
            // authentication (partner-key) required
            if (!String.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("partner-key")))
            {
                localVarHeaderParams["partner-key"] = this.Configuration.GetApiKeyWithPrefix("partner-key");
            }

            // make the HTTP request
            IRestResponse localVarResponse = (IRestResponse) this.Configuration.ApiClient.CallApi(localVarPath,
                Method.GET, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams,
                localVarPathParams, localVarHttpContentType);

            int localVarStatusCode = (int) localVarResponse.StatusCode;

            if (ExceptionFactory != null)
            {
                Exception exception = ExceptionFactory("GetTransacAggregatedSmsReport", localVarResponse);
                if (exception != null) throw exception;
            }

            return new ApiResponse<GetTransacAggregatedSmsReport>(localVarStatusCode,
                localVarResponse.Headers.ToDictionary(x => x.Key, x => x.Value.ToString()),
                (GetTransacAggregatedSmsReport) this.Configuration.ApiClient.Deserialize(localVarResponse, typeof(GetTransacAggregatedSmsReport)));
        }

        /// <summary>
        /// Get your SMS activity aggregated over a period of time 
        /// </summary>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="startDate">Mandatory if endDate is used. Starting date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="endDate">Mandatory if startDate is used. Ending date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="days">Number of days in the past including today (positive integer). Not compatible with startDate and endDate (optional)</param>
        /// <param name="tag">Filter on a tag (optional)</param>
        /// <returns>Task of GetTransacAggregatedSmsReport</returns>
        public async System.Threading.Tasks.Task<GetTransacAggregatedSmsReport> GetTransacAggregatedSmsReportAsync (string startDate = null, string endDate = null, int? days = null, string tag = null)
        {
             ApiResponse<GetTransacAggregatedSmsReport> localVarResponse = await GetTransacAggregatedSmsReportAsyncWithHttpInfo(startDate, endDate, days, tag);
             return localVarResponse.Data;

        }

        /// <summary>
        /// Get your SMS activity aggregated over a period of time 
        /// </summary>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="startDate">Mandatory if endDate is used. Starting date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="endDate">Mandatory if startDate is used. Ending date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="days">Number of days in the past including today (positive integer). Not compatible with startDate and endDate (optional)</param>
        /// <param name="tag">Filter on a tag (optional)</param>
        /// <returns>Task of ApiResponse (GetTransacAggregatedSmsReport)</returns>
        public async System.Threading.Tasks.Task<ApiResponse<GetTransacAggregatedSmsReport>> GetTransacAggregatedSmsReportAsyncWithHttpInfo (string startDate = null, string endDate = null, int? days = null, string tag = null)
        {

            var localVarPath = "./transactionalSMS/statistics/aggregatedReport";
            var localVarPathParams = new Dictionary<String, String>();
            var localVarQueryParams = new List<KeyValuePair<String, String>>();
            var localVarHeaderParams = new Dictionary<String, String>(this.Configuration.DefaultHeader);
            var localVarFormParams = new Dictionary<String, String>();
            var localVarFileParams = new Dictionary<String, FileParameter>();
            Object localVarPostBody = null;

            // to determine the Content-Type header
            String[] localVarHttpContentTypes = new String[] {
                "application/json"
            };
            String localVarHttpContentType = this.Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes);

            // to determine the Accept header
            String[] localVarHttpHeaderAccepts = new String[] {
                "application/json"
            };
            String localVarHttpHeaderAccept = this.Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts);
            if (localVarHttpHeaderAccept != null)
                localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept);

            if (startDate != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "startDate", startDate)); // query parameter
            if (endDate != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "endDate", endDate)); // query parameter
            if (days != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "days", days)); // query parameter
            if (tag != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "tag", tag)); // query parameter

            // authentication (api-key) required
            if (!String.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("api-key")))
            {
                localVarHeaderParams["api-key"] = this.Configuration.GetApiKeyWithPrefix("api-key");
            }
            // authentication (partner-key) required
            if (!String.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("partner-key")))
            {
                localVarHeaderParams["partner-key"] = this.Configuration.GetApiKeyWithPrefix("partner-key");
            }

            // make the HTTP request
            IRestResponse localVarResponse = (IRestResponse) await this.Configuration.ApiClient.CallApiAsync(localVarPath,
                Method.GET, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams,
                localVarPathParams, localVarHttpContentType);

            int localVarStatusCode = (int) localVarResponse.StatusCode;

            if (ExceptionFactory != null)
            {
                Exception exception = ExceptionFactory("GetTransacAggregatedSmsReport", localVarResponse);
                if (exception != null) throw exception;
            }

            return new ApiResponse<GetTransacAggregatedSmsReport>(localVarStatusCode,
                localVarResponse.Headers.ToDictionary(x => x.Key, x => x.Value.ToString()),
                (GetTransacAggregatedSmsReport) this.Configuration.ApiClient.Deserialize(localVarResponse, typeof(GetTransacAggregatedSmsReport)));
        }

        /// <summary>
        /// Get your SMS activity aggregated per day 
        /// </summary>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="startDate">Mandatory if endDate is used. Starting date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="endDate">Mandatory if startDate is used. Ending date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="days">Number of days in the past including today (positive integer). Not compatible with &#39;startDate&#39; and &#39;endDate&#39; (optional)</param>
        /// <param name="tag">Filter on a tag (optional)</param>
        /// <returns>GetTransacSmsReport</returns>
        public GetTransacSmsReport GetTransacSmsReport (string startDate = null, string endDate = null, int? days = null, string tag = null)
        {
             ApiResponse<GetTransacSmsReport> localVarResponse = GetTransacSmsReportWithHttpInfo(startDate, endDate, days, tag);
             return localVarResponse.Data;
        }

        /// <summary>
        /// Get your SMS activity aggregated per day 
        /// </summary>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="startDate">Mandatory if endDate is used. Starting date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="endDate">Mandatory if startDate is used. Ending date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="days">Number of days in the past including today (positive integer). Not compatible with &#39;startDate&#39; and &#39;endDate&#39; (optional)</param>
        /// <param name="tag">Filter on a tag (optional)</param>
        /// <returns>ApiResponse of GetTransacSmsReport</returns>
        public ApiResponse< GetTransacSmsReport > GetTransacSmsReportWithHttpInfo (string startDate = null, string endDate = null, int? days = null, string tag = null)
        {

            var localVarPath = "./transactionalSMS/statistics/reports";
            var localVarPathParams = new Dictionary<String, String>();
            var localVarQueryParams = new List<KeyValuePair<String, String>>();
            var localVarHeaderParams = new Dictionary<String, String>(this.Configuration.DefaultHeader);
            var localVarFormParams = new Dictionary<String, String>();
            var localVarFileParams = new Dictionary<String, FileParameter>();
            Object localVarPostBody = null;

            // to determine the Content-Type header
            String[] localVarHttpContentTypes = new String[] {
                "application/json"
            };
            String localVarHttpContentType = this.Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes);

            // to determine the Accept header
            String[] localVarHttpHeaderAccepts = new String[] {
                "application/json"
            };
            String localVarHttpHeaderAccept = this.Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts);
            if (localVarHttpHeaderAccept != null)
                localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept);

            if (startDate != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "startDate", startDate)); // query parameter
            if (endDate != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "endDate", endDate)); // query parameter
            if (days != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "days", days)); // query parameter
            if (tag != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "tag", tag)); // query parameter

            // authentication (api-key) required
            if (!String.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("api-key")))
            {
                localVarHeaderParams["api-key"] = this.Configuration.GetApiKeyWithPrefix("api-key");
            }
            // authentication (partner-key) required
            if (!String.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("partner-key")))
            {
                localVarHeaderParams["partner-key"] = this.Configuration.GetApiKeyWithPrefix("partner-key");
            }

            // make the HTTP request
            IRestResponse localVarResponse = (IRestResponse) this.Configuration.ApiClient.CallApi(localVarPath,
                Method.GET, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams,
                localVarPathParams, localVarHttpContentType);

            int localVarStatusCode = (int) localVarResponse.StatusCode;

            if (ExceptionFactory != null)
            {
                Exception exception = ExceptionFactory("GetTransacSmsReport", localVarResponse);
                if (exception != null) throw exception;
            }

            return new ApiResponse<GetTransacSmsReport>(localVarStatusCode,
                localVarResponse.Headers.ToDictionary(x => x.Key, x => x.Value.ToString()),
                (GetTransacSmsReport) this.Configuration.ApiClient.Deserialize(localVarResponse, typeof(GetTransacSmsReport)));
        }

        /// <summary>
        /// Get your SMS activity aggregated per day 
        /// </summary>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="startDate">Mandatory if endDate is used. Starting date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="endDate">Mandatory if startDate is used. Ending date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="days">Number of days in the past including today (positive integer). Not compatible with &#39;startDate&#39; and &#39;endDate&#39; (optional)</param>
        /// <param name="tag">Filter on a tag (optional)</param>
        /// <returns>Task of GetTransacSmsReport</returns>
        public async System.Threading.Tasks.Task<GetTransacSmsReport> GetTransacSmsReportAsync (string startDate = null, string endDate = null, int? days = null, string tag = null)
        {
             ApiResponse<GetTransacSmsReport> localVarResponse = await GetTransacSmsReportAsyncWithHttpInfo(startDate, endDate, days, tag);
             return localVarResponse.Data;

        }

        /// <summary>
        /// Get your SMS activity aggregated per day 
        /// </summary>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="startDate">Mandatory if endDate is used. Starting date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="endDate">Mandatory if startDate is used. Ending date (YYYY-MM-DD) of the report (optional)</param>
        /// <param name="days">Number of days in the past including today (positive integer). Not compatible with &#39;startDate&#39; and &#39;endDate&#39; (optional)</param>
        /// <param name="tag">Filter on a tag (optional)</param>
        /// <returns>Task of ApiResponse (GetTransacSmsReport)</returns>
        public async System.Threading.Tasks.Task<ApiResponse<GetTransacSmsReport>> GetTransacSmsReportAsyncWithHttpInfo (string startDate = null, string endDate = null, int? days = null, string tag = null)
        {

            var localVarPath = "./transactionalSMS/statistics/reports";
            var localVarPathParams = new Dictionary<String, String>();
            var localVarQueryParams = new List<KeyValuePair<String, String>>();
            var localVarHeaderParams = new Dictionary<String, String>(this.Configuration.DefaultHeader);
            var localVarFormParams = new Dictionary<String, String>();
            var localVarFileParams = new Dictionary<String, FileParameter>();
            Object localVarPostBody = null;

            // to determine the Content-Type header
            String[] localVarHttpContentTypes = new String[] {
                "application/json"
            };
            String localVarHttpContentType = this.Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes);

            // to determine the Accept header
            String[] localVarHttpHeaderAccepts = new String[] {
                "application/json"
            };
            String localVarHttpHeaderAccept = this.Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts);
            if (localVarHttpHeaderAccept != null)
                localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept);

            if (startDate != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "startDate", startDate)); // query parameter
            if (endDate != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "endDate", endDate)); // query parameter
            if (days != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "days", days)); // query parameter
            if (tag != null) localVarQueryParams.AddRange(this.Configuration.ApiClient.ParameterToKeyValuePairs("", "tag", tag)); // query parameter

            // authentication (api-key) required
            if (!String.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("api-key")))
            {
                localVarHeaderParams["api-key"] = this.Configuration.GetApiKeyWithPrefix("api-key");
            }
            // authentication (partner-key) required
            if (!String.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("partner-key")))
            {
                localVarHeaderParams["partner-key"] = this.Configuration.GetApiKeyWithPrefix("partner-key");
            }

            // make the HTTP request
            IRestResponse localVarResponse = (IRestResponse) await this.Configuration.ApiClient.CallApiAsync(localVarPath,
                Method.GET, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams,
                localVarPathParams, localVarHttpContentType);

            int localVarStatusCode = (int) localVarResponse.StatusCode;

            if (ExceptionFactory != null)
            {
                Exception exception = ExceptionFactory("GetTransacSmsReport", localVarResponse);
                if (exception != null) throw exception;
            }

            return new ApiResponse<GetTransacSmsReport>(localVarStatusCode,
                localVarResponse.Headers.ToDictionary(x => x.Key, x => x.Value.ToString()),
                (GetTransacSmsReport) this.Configuration.ApiClient.Deserialize(localVarResponse, typeof(GetTransacSmsReport)));
        }

        /// <summary>
        /// Send the SMS campaign to the specified mobile number 
        /// </summary>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sendTransacSms">Values to send a transactional SMS</param>
        /// <returns>SendSms</returns>
        public SendSms SendTransacSms (SendTransacSms sendTransacSms)
        {
             ApiResponse<SendSms> localVarResponse = SendTransacSmsWithHttpInfo(sendTransacSms);
             return localVarResponse.Data;
        }

        /// <summary>
        /// Send the SMS campaign to the specified mobile number 
        /// </summary>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sendTransacSms">Values to send a transactional SMS</param>
        /// <returns>ApiResponse of SendSms</returns>
        public ApiResponse< SendSms > SendTransacSmsWithHttpInfo (SendTransacSms sendTransacSms)
        {
            // verify the required parameter 'sendTransacSms' is set
            if (sendTransacSms == null)
                throw new ApiException(400, "Missing required parameter 'sendTransacSms' when calling TransactionalSMSApi->SendTransacSms");

            var localVarPath = "./transactionalSMS/sms";
            var localVarPathParams = new Dictionary<String, String>();
            var localVarQueryParams = new List<KeyValuePair<String, String>>();
            var localVarHeaderParams = new Dictionary<String, String>(this.Configuration.DefaultHeader);
            var localVarFormParams = new Dictionary<String, String>();
            var localVarFileParams = new Dictionary<String, FileParameter>();
            Object localVarPostBody = null;

            // to determine the Content-Type header
            String[] localVarHttpContentTypes = new String[] {
                "application/json"
            };
            String localVarHttpContentType = this.Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes);

            // to determine the Accept header
            String[] localVarHttpHeaderAccepts = new String[] {
                "application/json"
            };
            String localVarHttpHeaderAccept = this.Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts);
            if (localVarHttpHeaderAccept != null)
                localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept);

            if (sendTransacSms != null && sendTransacSms.GetType() != typeof(byte[]))
            {
                localVarPostBody = this.Configuration.ApiClient.Serialize(sendTransacSms); // http body (model) parameter
            }
            else
            {
                localVarPostBody = sendTransacSms; // byte array
            }

            // authentication (api-key) required
            if (!String.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("api-key")))
            {
                localVarHeaderParams["api-key"] = this.Configuration.GetApiKeyWithPrefix("api-key");
            }
            // authentication (partner-key) required
            if (!String.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("partner-key")))
            {
                localVarHeaderParams["partner-key"] = this.Configuration.GetApiKeyWithPrefix("partner-key");
            }

            // make the HTTP request
            IRestResponse localVarResponse = (IRestResponse) this.Configuration.ApiClient.CallApi(localVarPath,
                Method.POST, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams,
                localVarPathParams, localVarHttpContentType);

            int localVarStatusCode = (int) localVarResponse.StatusCode;

            if (ExceptionFactory != null)
            {
                Exception exception = ExceptionFactory("SendTransacSms", localVarResponse);
                if (exception != null) throw exception;
            }

            return new ApiResponse<SendSms>(localVarStatusCode,
                localVarResponse.Headers.ToDictionary(x => x.Key, x => x.Value.ToString()),
                (SendSms) this.Configuration.ApiClient.Deserialize(localVarResponse, typeof(SendSms)));
        }

        /// <summary>
        /// Send the SMS campaign to the specified mobile number 
        /// </summary>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sendTransacSms">Values to send a transactional SMS</param>
        /// <returns>Task of SendSms</returns>
        public async System.Threading.Tasks.Task<SendSms> SendTransacSmsAsync (SendTransacSms sendTransacSms)
        {
             ApiResponse<SendSms> localVarResponse = await SendTransacSmsAsyncWithHttpInfo(sendTransacSms);
             return localVarResponse.Data;

        }

        /// <summary>
        /// Send the SMS campaign to the specified mobile number 
        /// </summary>
        /// <exception cref="sib_api_v3_sdk.Client.ApiException">Thrown when fails to make API call</exception>
        /// <param name="sendTransacSms">Values to send a transactional SMS</param>
        /// <returns>Task of ApiResponse (SendSms)</returns>
        public async System.Threading.Tasks.Task<ApiResponse<SendSms>> SendTransacSmsAsyncWithHttpInfo (SendTransacSms sendTransacSms)
        {
            // verify the required parameter 'sendTransacSms' is set
            if (sendTransacSms == null)
                throw new ApiException(400, "Missing required parameter 'sendTransacSms' when calling TransactionalSMSApi->SendTransacSms");

            var localVarPath = "./transactionalSMS/sms";
            var localVarPathParams = new Dictionary<String, String>();
            var localVarQueryParams = new List<KeyValuePair<String, String>>();
            var localVarHeaderParams = new Dictionary<String, String>(this.Configuration.DefaultHeader);
            var localVarFormParams = new Dictionary<String, String>();
            var localVarFileParams = new Dictionary<String, FileParameter>();
            Object localVarPostBody = null;

            // to determine the Content-Type header
            String[] localVarHttpContentTypes = new String[] {
                "application/json"
            };
            String localVarHttpContentType = this.Configuration.ApiClient.SelectHeaderContentType(localVarHttpContentTypes);

            // to determine the Accept header
            String[] localVarHttpHeaderAccepts = new String[] {
                "application/json"
            };
            String localVarHttpHeaderAccept = this.Configuration.ApiClient.SelectHeaderAccept(localVarHttpHeaderAccepts);
            if (localVarHttpHeaderAccept != null)
                localVarHeaderParams.Add("Accept", localVarHttpHeaderAccept);

            if (sendTransacSms != null && sendTransacSms.GetType() != typeof(byte[]))
            {
                localVarPostBody = this.Configuration.ApiClient.Serialize(sendTransacSms); // http body (model) parameter
            }
            else
            {
                localVarPostBody = sendTransacSms; // byte array
            }

            // authentication (api-key) required
            if (!String.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("api-key")))
            {
                localVarHeaderParams["api-key"] = this.Configuration.GetApiKeyWithPrefix("api-key");
            }
            // authentication (partner-key) required
            if (!String.IsNullOrEmpty(this.Configuration.GetApiKeyWithPrefix("partner-key")))
            {
                localVarHeaderParams["partner-key"] = this.Configuration.GetApiKeyWithPrefix("partner-key");
            }

            // make the HTTP request
            IRestResponse localVarResponse = (IRestResponse) await this.Configuration.ApiClient.CallApiAsync(localVarPath,
                Method.POST, localVarQueryParams, localVarPostBody, localVarHeaderParams, localVarFormParams, localVarFileParams,
                localVarPathParams, localVarHttpContentType);

            int localVarStatusCode = (int) localVarResponse.StatusCode;

            if (ExceptionFactory != null)
            {
                Exception exception = ExceptionFactory("SendTransacSms", localVarResponse);
                if (exception != null) throw exception;
            }

            return new ApiResponse<SendSms>(localVarStatusCode,
                localVarResponse.Headers.ToDictionary(x => x.Key, x => x.Value.ToString()),
                (SendSms) this.Configuration.ApiClient.Deserialize(localVarResponse, typeof(SendSms)));
        }

    }
}
